我有一個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我不明白你的意思是'清除複選框'?你自己畫畫,你想清除它?或者你的意思是'取消選中複選框'? –