Alpaca Tech Blog

ゲーム作る系 草食動物の備忘録

DataGridViewを編集した時に、即座に反映させたい。

DataGridViewは、

チェックボックスやテキストボックスの内容を変更しても

フォーカスが変わらないと内部の変数に反映されません。

(CellValueChangedが発生しない)


DataGridViewのCurrentCellDirtyStateChangedイベントで

CommitEditを行うことにより、

チェックボックスやテキストボックスの内容が変わるとすぐに反映されるようになります。(CellValueChangedが呼び出される)

 

C#

private void dataGridView1_CurrentCellChanged(object sender, EventArgs e)
{
    var dgv = (DataGridView)sender;
    if(dgv.IsCurrentCellDirty)
    {
        dgv.CommitEdit(DataGridViewDataErrorContexts.Commit);
    }
}

  

C++/CLI

private: System::Void dataGridView1_CurrentCellDirtyStateChanged(System::Object^ sender, System::EventArgs^ e)

{

    auto dgv = (DataGridView^)sender;

    if ( dgv->IsCurrentCellDirty){

        dgv->CommitEdit(DataGridViewDataErrorContexts::Commit);

    }

}