CurrentCellDirtyStateChangedは、チェックボックスの値が変更されたときに使用できます。しかし、このイベントがトリガされると、選択されたロウがなくなります。あなたがするべきことは、それの前に選択されたロウを保存することだけです。
簡単なサンプル:簡単に完了できます。
DataGridViewSelectedRowCollection selected;
private void dataGridView1_CurrentCellDirtyStateChanged(object sender, EventArgs e)
{
DataGridView dgv = (DataGridView)sender;
DataGridViewCell cell = dgv.CurrentCell;
if (cell.RowIndex >= 0 && cell.ColumnIndex == 1) // My checkbox column
{
// If checkbox value changed, copy it's value to all selectedrows
bool checkvalue = false;
if (dgv.Rows[cell.RowIndex].Cells[cell.ColumnIndex].EditedFormattedValue != null && dgv.Rows[cell.RowIndex].Cells[cell.ColumnIndex].EditedFormattedValue.Equals(true))
checkvalue = true;
for (int i=0; i<selected.Count; i++)
dgv.Rows[selected[i].Index].Cells[cell.ColumnIndex].Value = checkvalue;
}
dataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit);
}
private void dataGridView1_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e)
{
selected = dataGridView1.SelectedRows;
}
[すべてを選択]チェックボックスがあることを意味しますか? – PraveenVenu
6つの行があり、4つの行が強調表示されているとします。次に、強調表示された行のいずれかのチェックボックスをクリックし、その状態を[チェック済み]に変更します。以前選択した状態に関係なく、選択された4つの行はすべて[Checked]になります。 – TarkaDaal
ポリシーは簡単です。ユーザーがグリッド内の行を選択しているときに、行データ項目のプロパティ値を変更しないでください。 GUIはバウンドコントロールとしてGUIを更新します。 –