VB.NET DataGridViewCheckBoxColumn の変化をすぐに反映させる

DataGridView を使っていて、
DataGridViewCheckBoxColumn のチェック状態と、それと同じ行にある DataGridViewComboBoxColumn の選択値に相関を持たせるという機能実装が必要に。
チェックボックスの付け外しをしたら、すぐに相関チェックが走るようにしたい。

単純に CellValueChanged だと一度フォーカスを外さないと反映されず、リアルタイム(?)の取りたい場合は CurrentCellDirtyStateChanged を使用する必要があるらしい。

下は、チェックボックス(myCheckBox)のチェックが外れたとき、同じ行のコンボボックス(myComboBox)が何か選択されていたら、メッセージ「hogehoge」を表示してチェックボックスのチェックを再度強制的にセットする、というサンプル。
DataGridView の CommitEnd と EndEdit がポイントだった。


  Private Sub SampleDataGridView_CurrentCellDirtyStateChanged(sender As Object, e As EventArgs) Handles SampleDataGridView.CurrentCellDirtyStateChanged
    If SampleDataGridView.CurrentCell.OwningColumn.Name = myCheckBox.Name AndAlso SampleDataGridView.IsCurrentCellDirty Then
      SampleDataGridView.CommitEdit(DataGridViewDataErrorContexts.Commit)

      Dim comboBoxStr As String = SampleDataGridView.CurrentRow.Cells(myComboBox.Name).FormattedValue
      If SampleDataGridView.CurrentCell.Value = False AndAlso comboBoxStr <> "" Then
        MsgBox("hogehoge")
        SampleDataGridView.CurrentCell.Value = True
        SampleDataGridView.EndEdit()

      End If

    End If

  End Sub



posted by へっぽ at 16:33 | TrackBack(0) | VB.NET | このブログの読者になる | 更新情報をチェックする
この記事へのトラックバックURL
http://blog.seesaa.jp/tb/431165500

この記事へのトラックバック