Option Strict On Public Class Form1 ''' <summary> ''' フォーム表示時の初期処理 ''' </summary> Private Sub Form1_Shown(sender As Object, e As EventArgs) Handles MyBase.Shown 'データ取得 Dim table As DataTable = LoadData() '初期表示。あとでフィルターをかける予定なのではじめからDataViewを設定しておく。 DataGridView1.DataSource = table.DefaultView '初期状態の合計値 RefreshAmount() End Sub ''' <summary> ''' 初期データをロードします。 ''' 本来はデータベースから読み込む処理が記述されるはずですが、 ''' このサンプルでは固定のデータを返します。 ''' </summary> ''' <returns></returns> Private Function LoadData() As DataTable Dim table As New DataTable table.Columns.Add("商品CD", GetType(String)) table.Columns.Add("金額", GetType(Integer)) table.Columns.Add("消費税額", GetType(Integer)) table.Rows.Add("001", 300, 30) table.Rows.Add("002", 400, 40) table.Rows.Add("003", 500, 50) table.Rows.Add("003", 600, 60) Return table End Function ''' <summary> ''' 合計金額と合計消費税額をLabelに表示します。 ''' </summary> Private Sub RefreshAmount() '現在バインドされているもとのDataTableを取得 Dim table As DataTable = DirectCast(DataGridView1.DataSource, DataView).Table Dim amount = Summary(table) Label1.Text = amount.TotalKingaku.ToString Label2.Text = amount.TotalZeigaku.ToString End Sub ''' <summary> ''' 合計金額と合計消費税額を計算します。 ''' </summary> ''' <param name="table"></param> ''' <returns></returns> Private Function Summary(table As DataTable) As (TotalKingaku As Integer, TotalZeigaku As Integer) Dim totalKingaku As Integer Dim totalZeigaku As Integer For Each row As DataRow In table.Rows totalKingaku += CInt(row.Item(1)) totalZeigaku += CInt(row.Item(2)) Next Return (totalKingaku, totalZeigaku) End Function ''' <summary> ''' 検索ボタン ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> Private Sub btnFilter_Click(sender As Object, e As EventArgs) Handles btnFilter.Click Dim table As DataTable = DirectCast(DataGridView1.DataSource, DataView).Table If Len(Trim(txtShohinCd.Text)) = 0 Then '何も入力されていない場合フィルターを解除 table.DefaultView.RowFilter = "" Else table.DefaultView.RowFilter = "商品CD = " & txtShohinCd.Text End If 'ビューをDataGridViewにバインドさせる。 DataGridView1.DataSource = table.DefaultView End Sub Private Sub DataGridView1_CellValueChanged(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellValueChanged 'DataGridView1のセルが編集された場合合計の表示を更新します。 RefreshAmount() End Sub End Class