投稿者 魔界の仮面弁士  (社会人) 投稿日時 2011/3/1 22:33:50
こんな感じでしょうか。初期状態は
 ☑     100
 ☐    2000
 ☑   30000
 ☑  400000
にしているので、合計「430,100」と表示されるかと思います。

Public Class Form1
    'DataTable の値を合計する場合は、Compute メソッドを使うと便利です。 
    Private Sub UpdateSummaryLabel()
        Dim o As Object = ds.Tables("T").Compute("SUM(値)""選択=TRUE")
        If IsDBNull(o) Then
            label1.Text = "選択されていません。"
        Else
            label1.Text = CDec(o).ToString("#,0")   '小数部も必要なら適宜修正 
        End If
    End Sub

    '行が削除されたら、計算処理を実行する。 
    Private Sub dgv_RowsRemoved(ByVal sender As Object, _
      ByVal e As DataGridViewRowsRemovedEventArgs) Handles dgv.RowsRemoved
        UpdateSummaryLabel()    '合計額をラベルに表示する処理 
    End Sub

    'セルの値が変更されたら、計算処理を実行する。 
    Private Sub dgv_CellValueChanged(ByVal sender As Object, _
      ByVal e As DataGridViewCellEventArgs) Handles dgv.CellValueChanged
        bs.EndEdit()            'DataGridView → DataSet への反映作業を確定させる。 
        UpdateSummaryLabel()    '合計額をラベルに表示する処理 
    End Sub

    'CheckBox が変更された場合、その行は即座に確定状態にする。 
    Private Sub dgv_CurrentCellDirtyStateChanged(ByVal sender As Object, _
      ByVal e As EventArgs) Handles dgv.CurrentCellDirtyStateChanged
        If dgv.CurrentCellAddress.X = 0 Then    'CheckBox 列か否か 
            If dgv.IsCurrentCellDirty Then      '編集作業中か否か 
                dgv.CommitEdit(DataGridViewDataErrorContexts.Commit)
            End If
        End If
    End Sub

    '数値項目に文字列が入力された場合への対処 
    Private Sub dgv_DataError(ByVal sender As Object, _
      ByVal e As DataGridViewDataErrorEventArgs) Handles dgv.DataError
        MessageBox.Show(e.Exception.Message, "入力エラー", _
            MessageBoxButtons.OK, MessageBoxIcon.Information)
        e.ThrowException = False
    End Sub


    '画面構築。通常はデザイナで設定しておけばOK。 
    Private Sub Form1_Load(ByVal sender As ObjectByVal e As EventArgs) Handles Me.Load
        If components Is Nothing Then
            components = New System.ComponentModel.Container()
        End If
        bs = New BindingSource(Me.components)

        dgv = New DataGridView()
        dgv.Dock = DockStyle.Fill
        dgv.EditMode = DataGridViewEditMode.EditOnEnter
        dgv.AutoGenerateColumns = True
        Controls.Add(dgv)

        label1 = New Label()
        label1.Dock = DockStyle.Top
        label1.Text = "0"
        label1.TextAlign = ContentAlignment.BottomRight
        label1.Font = New Font(Me.Font.FontFamily, 18)
        Controls.Add(label1)

        ds = New DataSet()
        Dim tbl As DataTable = ds.Tables.Add("T")
        tbl.Columns.Add("選択"GetType(Boolean))
        tbl.Columns.Add("値"GetType(Decimal))

        tbl.Rows.Add(True, 100)
        tbl.Rows.Add(False, 2000)
        tbl.Rows.Add(True, 30000)
        tbl.Rows.Add(True, 400000)
        tbl.AcceptChanges()

        bs.DataSource = ds
        bs.DataMember = "T"
        dgv.DataSource = bs
        dgv.Columns(1).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
        'dgv.Columns(1).DefaultCellStyle.Format = "#,0" 

        UpdateSummaryLabel()
    End Sub
    Private WithEvents label1 As Label
    Private WithEvents dgv As DataGridView
    Private WithEvents bs As BindingSource
    Private WithEvents ds As DataSet
End Class