我有一个数据绑定的datagridview。如果不满足某些条件,如何取消在datagridview中检查的复选框?
private void dataGridViewStu_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
dataGridViewStu.CommitEdit(DataGridViewDataErrorContexts.Commit);
}
private void dataGridViewStu_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
}
答案 0 :(得分:2)
一种可能的方法是处理CurrentCellDirtyStateChanged
上的DataGridView
事件。检查您的情况并确保当前单元格为CheckBoxCell
,然后在满足两个条件时调用CancelEdit
。
private void dataGridView1_CurrentCellDirtyStateChanged(object sender, EventArgs e)
{
if (youShouldCancelCheck &&
this.dataGridView1.IsCurrentCellDirty &&
this.dataGridView1.CurrentCell is DataGridViewCheckBoxCell)
{
this.dataGridView1.CancelEdit();
// Addition code here.
}
}
修改强>
我在if
语句中添加了一个附加条件,以便在运行CancelEdit
和其他代码之前检查单元格是否脏。这应该不再运行两次。发生的事情是:
IsCurrentCellDirty = true
和CurrentCellDirtyStateChanged
被解雇。CancelEdit
被触发,取消所有更改并设置IsCurrentCellDirty = false
。因此CurrentCellDirtyStateChanged
再次被解雇。 CurrentCellDirtyStateChanged
仍将被触发两次,但条件中的代码只会在脏时运行。