Datagrid: Calculați valoarea medie sau sumă pentru coloana din subsol

Am o datagrid legat de un set de date și vreau să afișez rezultatul mediu în subsolul unei coloane populate cu numere întregi.

În felul în care mă gândesc, sunt două moduri în care mă pot gândi:

1. "Utilizați Sursa , Luke"
În codul în care apelez DataGrid.DataBind (), folosiți metoda DataTable.Compute() ( sau în cazul meu DataSet.DataTable (0) .Compute() ). De exemplu:

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

Dar, odată ce am acest lucru, cum pot să îl introduc în subsol?

2. " Bound pentru Glory"
Utilizând evenimentul DataGrid.ItemDataBound și calculând un total de funcționare din fiecare ListItemType.Item și ListItemType.AlternatingItem, în cele din urmă afișând în ListItemType.Footer. De exemplu:

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

Acest lucru se simte prost, plus ar trebui să vă asigur că runTotal este resetat pe fiecare DataBind.

Există o cale mai bună?

0
fr hi bn

2 răspunsuri

Vă mulțumim DannySmurf , primul dvs. răspuns ma facut sa vad sens. ( De ce căutăm întotdeauna soluția magică? ).

Pentru referință, iată ce am făcut: ( Avertisment: VB de mai jos, poate să nu conțină punct și virgulă suficient) )

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

Aveam nevoie să o fac pentru mai multe coloane (de aici 3 până la 8), în cele din urmă de ce căutam soluția magică.

0
adăugat

Nu știu dacă sunt fie neapărat mai bune, dar două căi alternative ar fi:

  1. Rulați manual prin masă odată ce ați atins subsolul și calculați din textul pe ecran
  2. Recuperați manual datele și efectuați calculul separat de legare

Bineînțeles, numărul 2 generează avantajele legării datelor (presupunând că asta faci).

0
adăugat