0

IEnumerable にバインドされた DGV があります。T には、取得/設定できるブール型のプロパティがあります。テーブルをロードするときに、get プロパティにアクセスして、DataGridViewCheckboxColumn にデータを設定します。デバッガーでヒットしていることがわかります。チェックボックス列のセルをクリックすると、期待どおりにチェックボックスがオンになりますが、基になるデータ ソースは更新されず、プロパティ セッターは呼び出されません。チェックボックス列には、ReadOnly プロパティが false に設定されています。

これを取得して、基になるバインドされたデータを更新するにはどうすればよいですか?

polygonListBindingSource.DataSource = m_displayPolygons.OrderBy(p => p.Name);

関連する質問を見てきましたが、回答に一貫性がありません。DGV で EndEdit を呼び出すことを提案する人もいれば、バインディング ソースで呼び出すことを提案する人もいます。セル値が変更されたときに、基になるデータ型への変更を実際にコミットするために、イベントをサブスクライブする必要がありますか? これは不自然に思えます。

4

1 に答える 1

0

これはDataGridView、現在のセルがフォーカスを失ったときにのみ編集がコミットされるという事実によるものです。チェックボックスをクリックするだけでは、編集をコミットするのに十分ではありません。

これを行う標準は、イベント、通常はCurrentCellDirtyStateChangedイベントを使用することです。

void dataGridView1_CurrentCellDirtyStateChanged(object sender, EventArgs e)
{
    if (dataGridView1.IsCurrentCellDirty)
    {
        dataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit);
    }
}

これは少し不自然ですが、仕様によるものです。これにより、データ ソースが最終ではない可能性のある編集によってあふれてしまうことがなくなります。チェックボックスにとっては必ずしも大したことではありませんが、テキスト ボックス セルにとっては価値のある設計上の決定です。

于 2012-08-30T12:03:11.350 に答える