- 題名: Computeについて
- 日時: 2010/07/20 16:47:28
- ID: 27102
- この記事の返信元:
- (なし)
- この記事への返信:
- [27103] Re[1]: Computeについて2010/07/20 22:45:00
- ツリーを表示
shuさん 早い返信ありがとうございます。 > Computeする前に > 試しにAcceptChangeメソッドを呼ぶとどうなるでしょうか? さっそく試させていただきました。 チェックのあるもののみ集計値を算出し、 思っていた動作ができました。 本当にありがとうございます。 ということは、Computeが集計に利用しているデータというのは やはり更新前のデータということなのでしょうか。 使用する時は気をつけないといけないですね…。
分類:[.NET]
初めてComputeを使用したのですが、思うような結果を出せずに悩んでいます。 行いたいことは次の処理です。 1、DataGridViewに表示しているチェックボックス(DataGridViewCheckBoxColumn)を クリックするごとにチェックのある行のみを集計し、 合計値をテキストボックスに表示する。 DataGridViewのCellContentClick、CellValueChangedイベントを使って チェックが変わった時のイベントはとれています。 CellValueChangedイベントで行っているComputeの処理が チェックのあるものだけを集計してくれません。 ソースは次のように記述しています。(解放処理など、一部簡素化しています) Dim objDT As New DataTable 'DataTableの定義 'チェックボックス(チェックなし…0、チェックあり…1) objDT.Columns.Add("CHECKVALUE", GetType(Integer)).DefaultValue = 1 '集計値 objDT.Columns.Add("ITEM1", GetType(Integer)).DefaultValue = 0 objDT.Columns.Add("ITEM2", GetType(Integer)).DefaultValue = 0 objDT.Rows.Add(1, 10, 5) objDT.Rows.Add(1, 20, 15) objDT.Rows.Add(1, 0, 1) '列の自動生成をしない dgvList.AutoGenerateColumns = False dgvList.DataSource = objDT ------------------------------------------------- Private Sub dgvList_CurrentCellDirtyStateChanged(ByVal sender As Object, ByVal e As EventArgs) Handles dgvList.CellContentClick If dgvList.CurrentCellAddress.X = 0 AndAlso _ dgvList.IsCurrentCellDirty Then 'コミット dgvList.EndEdit() End If End Sub -------------------------------------------------- Private Sub dgvList_CellValueChanged(ByVal sender As Object, ByVal e As DataGridViewCellEventArgs) Handles dgvList.CellValueChanged 'チェックボックスの列かどうか調べる If e.ColumnIndex = 0 AndAlso _ TypeOf dgvList.Columns(e.ColumnIndex) Is DataGridViewCheckBoxColumn Then Dim objValue As Object 'チェックのあるもののみ集計 objValue = objDT.Compute("SUM(ITEM1)", "CHECKVALUE=1") txtTotal1.Text = objValue.ToString objValue = objDT.Compute("SUM(ITEM2)", "CHECKVALUE=1") txtTotal2.Text = objValue.ToString End If End Sub objDT、dgvList.DataSource、sender のCHECKVALUEの値は、 チェックした状態にデータ内容は変わるのですが、 Computeのフィルターにはひかかってくれません。 拙い説明ですが、よろしくお願いします。