2012-08-03 418 views
1

在我使用this.EndInvoke(this.BeginInvoke(new MethodInvoker(this.resortRows)));調用,檢查空細胞的方法此刻排序呼叫,然後排序DGV。但我從CellEndEdit調用它。如果該事件由按Enter鍵或Tab稱爲C#的DataGridView - 從CellEndEdit事件

一切工作正常,但如果我點擊另一個單元,同時仍然在編輯模式下,我得到與sort命令行錯誤:

Operation is not valid because it results in a reentrant call to the SetCurrentCellAddressCore function. 

這是sort命令:

this.dataGridView1.Sort(this.dataGridView1.Columns[2], ListSortDirection.Ascending); 

我試圖喊得的MouseClick事件是這樣的:

private void dataGridView1_MouseClick(object sender, MouseEventArgs e) 
{ 
    this.dataGridView1.EndEdit(); 
} 

但是,只有當我在灰色區域內單擊DGV時(不在任何單元格或標題上),此功能纔有效。 我該如何解決這個問題?

回答

1

其實,我想你的代碼,似乎這個問題是EndInvoke
只是將其刪除(即只BeginInvoke使用),它會正常工作。

編輯:

使用BeginInvoke沒有EndInvoke被調用的方法將被執行剛過CellEndEdit處理程序退出。

如果您需要在每個分揀後調用代碼,只需把它放在調用的方法結束。

+0

,這意味着我不得不重寫我一半類。 :( 反思一切。 – Qsiris 2012-08-03 09:22:47

+0

這並不自動排序,它只是顯示一個小三角形表明排序方向。 – Qsiris 2012-08-03 09:28:50

+0

奇怪,我的作品......只要我編輯一個單元格的列被自動排序... – digEmAll 2012-08-03 11:50:57