如何取消DataGridView中的复选框被选中

时间:2015-02-05 14:59:53

标签: c# checkbox datagridview unchecked

我有一个数据绑定的datagridview。如果不满足某些条件,如何取消在datagridview中检查的复选框?

private void dataGridViewStu_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
    dataGridViewStu.CommitEdit(DataGridViewDataErrorContexts.Commit);
}

private void dataGridViewStu_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
}

1 个答案:

答案 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和其他代码之前检查单元格是否脏。这应该不再运行两次。发生的事情是:

  1. 用户点击复选框。 IsCurrentCellDirty = trueCurrentCellDirtyStateChanged被解雇。
  2. 符合条件。 CancelEdit被触发,取消所有更改并设置IsCurrentCellDirty = false。因此CurrentCellDirtyStateChanged再次被解雇。
  3. CurrentCellDirtyStateChanged仍将被触发两次,但条件中的代码只会在脏时运行。