我有一个DataGridView
带有两个复选框列。当他们两个上的任何行都被选中时,我想清除复选标记。网格从DataTable填充。它的工作原理是这样的:立即刷新DataGridView单元格值
if (bothColumnsAreChecked)
{
DataRow first = SelectedFirstItems.First();
DataRow second = SelectedSecondItems.First();
// stuff...
first["IsCheckedFirst"] = false;
second["IsCheckedSecond"] = false;
}
按this,我点击复选框,而不是当失去焦点后立即修改代码以触发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现在被清除(在记录复选框信息之后)。
问题是,虽然chackmark从r1中的c1中消失,但它仍停留在r2上的复选框中,直到r2失去焦点。
希望有所帮助。
我不明白。选择datagridview中的行并在某个列中添加复选标记(我假设你已经从你写的内容中获得)是两种不同的东西。你想达到什么目的?选择消失还是什么? – Tarec
当我点击一个复选框时,复选框被选中。选择可能会消失或不会,这并不重要。我想要做的是在清除复选框后重新绘制网格,以便复选标记不存在。 –
@JohnNoCookies我不明白你的意思是'清除复选框'?你自己画画,你想清除它?或者你的意思是'取消选中复选框'? –