2008-08-13 106 views
5

我有一個datagrid綁定到數據集,並且我想在填充整數的列的頁腳中顯示平均值。Datagrid:計算Footer中的列的平均值或求和值

我圖的方式,有2種方式,我能想到的:

1.「使用來源,盧克」
在我打電話DataGrid.DataBind(代碼),使用DataTable.Compute()方法(或在我的情況DataSet.DataTable(0).Compute())。例如:

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

但是,一旦我有這個,我怎麼能插入到頁腳?

2.「束縛爲光」
使用DataGrid.ItemDataBound事件,並計算從每一個ListItemType.Item和ListItemType.AlternatingItem的運行總計,最後在ListItemType.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 

這只是感覺錯了,再加上我將不得不確保runTotal在每個DataBind上重置。

有沒有更好的方法?

回答

1

我不知道這兩個是一定要好,但有兩個交替方式將是:

  1. 手動通過表運行,一旦你打到尾,並從屏幕上的文字計算
  2. 手動檢索數據,並從綁定

當然,#分別做計算2排序偏移的數據綁定的優點(假設這是你在做什麼)。

1

謝謝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)最終爲什麼我在尋找神奇的解決方案。