Сетка данных: рассчитать среднее или сумму для столбца в нижнем колонтитуле - PullRequest
5 голосов
/ 13 августа 2008

У меня есть сетка данных, привязанная к набору данных, и я хочу отобразить средний результат в нижнем колонтитуле столбца, заполненного целыми числами.

Как я понимаю, есть два способа, которыми я могу думать:

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

Это просто неправильно, плюс мне нужно убедиться, что runningTotal сбрасывается при каждой привязке данных.

Есть ли лучший способ?

Ответы [ 2 ]

1 голос
/ 13 августа 2008

Спасибо 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), в конечном счете, поэтому я искал магическое решение.

1 голос
/ 13 августа 2008

Я не знаю, обязательно ли оба лучше, но два альтернативных пути будут:

  1. Вручную пробежаться по таблице, как только вы нажмете на нижний колонтитул, и рассчитать по экранному тексту
  2. Получить данные вручную и выполнить расчет отдельно от привязки

Конечно, # 2 компенсирует преимущества привязки данных (при условии, что это то, что вы делаете).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...