5

データグリッドがデータセットにバインドされており、整数が入力された列のフッターに平均結果を表示したいと考えています。

私が考える方法は、私が考えることができる2つの方法があります:

1.「ソースを使用してください、ルーク」
DataGrid.DataBind() を呼び出しているコードで、 DataTable.Compute() メソッド (または、私の場合は DataSet.DataTable(0).Compute() ) を使用します。例えば:

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

しかし、これを取得したら、どうすればそれをフッターに挿入できますか?

2.「Bound for Glory」
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

これは間違っているように感じます。さらに、すべての DataBind で runningTotal がリセットされていることを確認する必要があります。

より良い方法はありますか?

4

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)に対してそれを行う必要があり、最終的に私が魔法の解決策を探していた理由です。

于 2008-08-13T03:36:03.187 に答える
1

どちらかが必ずしも優れているかどうかはわかりませんが、2 つの代替方法は次のようになります。

  1. フッターをクリックして画面上のテキストから計算したら、テーブルを手動で実行します
  2. データを手動で取得し、バインドとは別に計算を行う

もちろん、#2 の並べ替えは、データ バインディングの利点を相殺します (それがあなたがしていることだと仮定します)。

于 2008-08-13T02:59:55.943 に答える