DOBON.NET DOBON.NETプログラミング掲示板過去ログ

Computeについて

  • 題名: Computeについて
  • 著者: イデア
  • 日時: 2010/07/20 16:47:28
  • ID: 27102
  • この記事の返信元:
    • (なし)
  • この記事への返信:
  • ツリーを表示
環境/言語:[VS2008 VB.NET Framework3.0]
分類:[.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のフィルターにはひかかってくれません。


拙い説明ですが、よろしくお願いします。
Computeする前に
試しにAcceptChangeメソッドを呼ぶとどうなるでしょうか?
  • 題名: Re[2]: Computeについて
  • 著者: イデア
  • 日時: 2010/07/21 11:39:37
  • ID: 27106
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
shuさん
早い返信ありがとうございます。

> Computeする前に
> 試しにAcceptChangeメソッドを呼ぶとどうなるでしょうか?

さっそく試させていただきました。

チェックのあるもののみ集計値を算出し、
思っていた動作ができました。
本当にありがとうございます。

ということは、Computeが集計に利用しているデータというのは
やはり更新前のデータということなのでしょうか。
使用する時は気をつけないといけないですね…。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板