如何取消选中 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 和您的附加代码之前检查单元格是否脏了。这应该不再 运行 两次。发生的事情是:

  1. 用户点击复选框。 IsCurrentCellDirty = trueCurrentCellDirtyStateChanged 被解雇。
  2. 满足条件。 CancelEdit 被触发,取消所有更改并设置 IsCurrentCellDirty = false。因此 CurrentCellDirtyStateChanged 再次被解雇。

CurrentCellDirtyStateChanged 仍会被触发两次,但条件内的代码只有在脏时才会 运行。