2016-12-14 63 views
0

我使用CellEndEdit此代碼:錯誤CellEndEdit代碼,當我點擊其他細胞

if ((dataGridView1.Columns[dataGridView1.CurrentCell.ColumnIndex].Name == "Column1")) 
{ 
    dataGridView1.CurrentCell = dataGridView1[1, 0]; 
} 

如果我在編輯模式下(不選擇模式)是我點擊另一個單元格我得到的錯誤:

InvalidOperationExpection was unhandled

見下圖的是什麼,我解釋一個例子:

​​

我想這樣的事情沒有結果:

private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e) 
{ 
    dataGridView1.CellEndEdit += new DataGridViewCellEventHandler(dataGridView1_CellEndEdit); 
} 
+0

對不起我的答案沒有工作,祝您好運! – JohnG

回答

0

詳細錯誤

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

這樣你就可以解決您在使用BeginInvoke這樣這個問題。

private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e) 
    { 
     if ((dataGridView1.Columns[dataGridView1.CurrentCell.ColumnIndex].Name == "Column1")) 
     { 
      this.BeginInvoke(new MethodInvoker(() => 
      { 
       dataGridView1.CurrentCell = dataGridView1[1, 0]; 
      })); 
     } 
    } 

Control.BeginInvoke方法 - 在這裏你會發現doc

Executes the specified delegate asynchronously on the thread that the control's underlying handle was created on.

+0

它的工作原理,但當我在編輯模式,我點擊鼠標到另一個單元它運行的代碼。例如,如果它在第一個單元格編輯模式下,我點擊第三個單元格,它會選擇第二個單元格 – drs

+0

您可能需要調用'dataGridView1.BeginEdit(true);'設置完當前單元格後 –

+0

我試過同樣的問題。是否有任何代碼接受編輯?並將其轉換爲選擇模式? – drs