2008-08-13 10 views
5

データセットにデータセットをバインドしていて、整数が入力された列の平均結果をフッターに表示します。Datagrid:フッター内の列の平均または合計を計算します

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

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

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

しかし、私はこれを持っていたら、どのように私はフッターに挿入することができますか?
DataGrid.ItemDataBoundイベントを使用して、最終的にListItemType.Footerでの表示、すべてのは、ListItemType.ItemとListItemType.AlternatingItemのからの累計を計算する「栄光のためバウンド

2。たとえば、

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がリセットされていることを確認する必要があります。

良い方法がありますか?

答えて

1

どちらかが必ずしも優れている場合、私は知らないが、2 代替方法は次のようになります。

  1. が手動でフッターを打った後、テーブルを介して実行し、画面上のテキストから計算
  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)のためにそれを行うために必要な、最終的に私は魔法の解決策を探していたのです。

関連する問題