如何取消选中 DataGridView 中的复选框
How to cancel a checkbox in a DataGridView from being checked
我有一个数据绑定的 datagridview。如果不满足某些条件,如何取消在 datagridview 中选中的复选框?
private void dataGridViewStu_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
dataGridViewStu.CommitEdit(DataGridViewDataErrorContexts.Commit);
}
private void dataGridViewStu_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
}
一种可能的方法是处理 DataGridView
上的 CurrentCellDirtyStateChanged
事件。检查您的条件并确保当前单元格是 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
仍会被触发两次,但条件内的代码只有在脏时才会 运行。
我有一个数据绑定的 datagridview。如果不满足某些条件,如何取消在 datagridview 中选中的复选框?
private void dataGridViewStu_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
dataGridViewStu.CommitEdit(DataGridViewDataErrorContexts.Commit);
}
private void dataGridViewStu_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
}
一种可能的方法是处理 DataGridView
上的 CurrentCellDirtyStateChanged
事件。检查您的条件并确保当前单元格是 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
仍会被触发两次,但条件内的代码只有在脏时才会 运行。