我有一个DataGridView
带有两个复选框的列。当检查它们的任何行时,我想清除复选标记。网格由 DataTable 填充。它是这样工作的:
if (bothColumnsAreChecked)
{
DataRow first = SelectedFirstItems.First();
DataRow second = SelectedSecondItems.First();
// stuff...
first["IsCheckedFirst"] = false;
second["IsCheckedSecond"] = false;
}
根据这个,我修改了代码以CellValueChanged
在单击复选框后立即触发事件,而不是在失去焦点时:
void brandsGridView_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
brandsGridView.CommitEdit(DataGridViewDataErrorContexts.Commit);
}
问题是,在清除复选标记后,其中一行仍被选中(因为我只是单击了该行中的一个复选框),并且该行上的复选标记仍然可见 - 它不会消失,直到我取消选择排。我该如何做到这一点?我试过了:
1)Refresh()
在网格上。徒劳无功; 网格会刷新,但在移动光标之前不会重绘。
2)CommitEdit()
和EndEdit()
。这甚至不会清除最后选中的复选框。
我能做些什么?
编辑:我不擅长解释。这是一个简单的演练:
有两个复选框列:c1 和 c2。
1) 我点击 r1 行上的 c1。c1 被选中并且 r1 被选中。
2) 我在 r2 行(甚至 r1)上单击 c2。c2 被选中并且 r2 被选中。
3) c1 和 c2 现在被清除(在某处记录复选框信息后)。
问题是,当 r1 中的 c1 中的标记消失时,它会一直停留在 r2 上的复选框中,直到 r2 失去焦点。
希望有帮助。