Seasons.NET

ちょっとした技術ブログです

DataGridViewではまるところ

DataGridViewでチェックボックスを配置していた場合、
チェックした瞬間にステータスを取りたい時がある。

その場合、デフォルトのValueChangedイベントだけじゃとれない。

MSDNによれば、

CurrentCellDirtyStateChanged イベントを処理する方法を次のコード例に示します。
この例では、イベント ハンドラは CommitEdit メソッドを呼び出して CellValueChanged イベントを発生させ、
DataGridViewCheckBoxCell の現在の値を決定します。
次のコード例は、「方法 : Windows フォーム DataGridView コントロールのボタン列にあるボタンを無効にする」で示されている例の一部です。

// This event handler manually raises the CellValueChanged event
// by calling the CommitEdit method.
void dataGridView1_CurrentCellDirtyStateChanged(object sender,
    EventArgs e)
{
    if (dataGridView1.IsCurrentCellDirty)
    {
        dataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit);
    }
}

チェックボックスをクリックした瞬間では、そのステータスがコミット完了状態ではなく、
CurrentCellDirtyStateChangedを利用して、
コミットされていないものがあれば、自分でコミットしてあげて、
CellValueChangedを発生させる必要があるみたい。