當Checkbox值發生變化時,您可以使用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 2012-03-14 13:35:54
不完全。假設您有六行,並突出顯示/選擇4行。然後點擊其中一個突出顯示的行中的複選框,將其狀態更改爲「已檢查」。現在,所有四個選定的行都應該被選中,無論它們以前的狀態如何。 – TarkaDaal 2012-03-14 15:15:24
保持簡單就是保單。當用戶選擇網格中的行時,爲什麼不讓數據項的屬性值更改爲true?這將更新GUI作爲其綁定控件。 – 2012-03-20 14:49:17