2008-08-13 17 views
5

'daki sütun için Avg veya Sum'u hesapla Veri kümesine bir veri kümesine bağlanıyorum ve tamsayılarla dolu bir sütun için altbilgide ortalama sonucu görüntülemek istiyorum.Datagrid: Footer

Ben rakam yolu, Aklıma gelen 2 yolu vardır:

1. Ben DataGrid.DataBind (aramıştım kodunda
"Kaynak Luke kullan"), kullanmak DataTable.Compute() yöntemi (veya benim durumumda DataSet.DataTable (0) .Compute()). Örneğin:

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

Ama bir kere buna sahip olduğumda, altbilgiye nasıl yerleştirebilirim?
DataGrid.ItemDataBound olayını kullanarak ve son olarak ListItemType.Footer içinde görüntülendiği her ListItemType.Item ve ListItemType.AlternatingItem bir çalışan toplam hesaplama "Glory için Bağlı "

2.. Örneğin:

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 

Bu sadece yanlış geliyor, artı RunningTotal her DataBind üzerinde sıfırlanır emin olmak gerekir.

Daha iyi bir yolu var mı?

cevap

1

ya mutlaka daha iyi olup olmadığını bilmiyorum, ancak iki alternatif yolu olacaktır:

  1. Elle altbilgi çarptıktan sonra masanın üzerinden çalışmasını ve ekran metinden hesaplamak
  2. Elle veri almak ve bağlama tabii

, # ayrı uzaklıklar 2 çeşit hesaplama yapmak veri bağlama avantajları (ne yaptığını budur varsayarak).

1

Teşekkürler DannySmurf, ilk cevabınız beni anlamlı gördü. (Neden her zaman bu sihirli çözümü ararız?). (Dolayısıyla 3 ila 8) Ben birkaç sütun için bunu yapmak için gerekli

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 

: (yeterli noktalı virgül içeremez, VB aşağıda Uyarı:)

Başvuru için, burada yaptığım sona erdi budur En nihayetinde büyülü çözümü aradım.