代码之家  ›  专栏  ›  技术社区  ›  Mark Glorie

数据报:计算页脚中列的平均值或总和

  •  5
  • Mark Glorie  · 技术社区  · 17 年前

    我有一个数据报绑定到一个数据集,我想在页脚中显示用整数填充的列的平均结果。

    我认为有两种方法:

    1、“使用 来源 “卢克”
    在我调用datagrid.databind()的代码中,使用dataTable.compute()方法( 或者在我的例子中,dataset.datatable(0.compute()) )例如:

    Dim strAverage = DataTable.Compute("Avg(ColumnName)", "")  
    

    但是一旦我有了这个,我怎么能把它插入页脚呢?

    2。 为了荣耀
    使用datagrid.itemdatabound事件,并从每个listemtype.item和listemtype.alternatingitem计算一个运行总数,最后显示在listemtype.footer中。例如:

    Select Case e.Item.ItemType
        Case ListItemType.Item, ListItemType.AlternatingItem
            runningTotal += CInt(e.Item.Cells(2).Text)
        Case ListItemType.Footer
            e.Item.Cells(2).Text = runningTotal/DataGrid.Items.Count
    End Select
    

    这只是感觉错误,而且我必须确保在每个数据绑定上重置runningtotal。

    有更好的方法吗?

    2 回复  |  直到 12 年前
        1
  •  1
  •   TheSmurf    17 年前

    我不知道哪一个更好,但是两个 交替的 方法是:

    1. 点击页脚后手动浏览表格,并根据屏幕上的文本进行计算。
    2. 手动检索数据并与绑定分开进行计算

    当然,2可以抵消数据绑定的优势(假设这就是您要做的)。

        2
  •  1
  •   Community CDub    8 年前

    谢谢 DannySmurf 你的第一个回答让我明白了。( 为什么我们总是在寻找那个神奇的解决方案? )

    作为参考,我最后做的是:( 警告:下面是vb,可能包含的分号不够 )

    Case ListItemType.Footer
        e.Item.Cells(0).Text = "Average"
        For i As Integer = 3 To 8
            Dim runningTotal As Integer = 0
            For Each row As DataGridItem In DataGrid.Items
                If IsNumeric(row.Cells(i).Text) Then
                    runningTotal += CInt(row.Cells(i).Text)
                End If
            Next
        e.Item.Cells(i).Text = Math.Round(runningTotal / DataGrid.Items.Count, 0)
        Next
    End Select
    

    我需要为几列(因此3到8列)做这个,最终为什么我要寻找神奇的解决方案。

    推荐文章