【VB.NET】DataGridViewの値変更時に即時反映させる方法

概要

  • DataGridViewのCellValueChangedイベントは、フォーカスが外れた時に発生する
  • フォーカスが外れなくても、値の変更を反映させるために、コミット処理を行う

DataGridViewのチェック値変更結果を画面に表示する

VB
  Private Sub DataGridView1_CellValueChanged(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellValueChanged

        'チェックボックス列でない場合、スキップ
        If e.ColumnIndex <> DataGridView1.Columns("Col1").Index Then Return

        'チェック時、「チェックオン」と表示する
        If dt.Rows(e.RowIndex).Item(e.ColumnIndex).ToString = "True" Then
            MessageBox.Show("チェックオン")
        Else
            MessageBox.Show("チェックオフ")
        End If

    End Sub

即時反映させるための処理

VB
   Private Sub DataGridView1_CurrentCellDirtyStateChanged(sender As Object, e As EventArgs) Handles DataGridView1.CurrentCellDirtyStateChanged

        '編集をコミット
        If DataGridView1.IsCurrentCellDirty Then
            DataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit)
        End If

    End Sub

動作確認用コード

VB
   Public dt As New DataTable
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

        With dt
            .Columns.Add("Col1", GetType(Boolean))
            .Columns.Add("Col2", GetType(String))

            .Rows.Add(False, "TEST1")
            .Rows.Add(False, "TEST2")
        End With

        With DataGridView1
            .DataSource = dt
            .AllowUserToAddRows = False
        End With

    End Sub

コメント

タイトルとURLをコピーしました