Datagrid: Вычислить Avg или Sum для столбца в сноске

голоса
5

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

Путь я полагаю, что есть 2 способа я могу думать:

1. Использование источника , Люк
В коде , где я звоню DataGrid.DataBind (), используйте метод DataTable.Compute () ( или в моем случае DataSet.DataTable (0) .Compute () ). Например:

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

Но как только у меня есть это, как я могу вставить его в сноске?

2. « Bound для Славы»
Использование события 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 сбрасывается на каждом DataBind.

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

Задан 13/08/2008 в 03:15
источник пользователем
На других языках...                            


2 ответов

голоса
1

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

  1. Вручную запустить через стол, как только вы попали в подвал и вычислить из экранного текста
  2. Вручную извлечь данные и сделать расчет отдельно от привязки

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

Ответил 13/08/2008 в 03:59
источник пользователем

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

Ответил 13/08/2008 в 04:36
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more