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 Object, ByVal 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