2011-02-17 105 views
1

我有一個DataGridView有7個單元格,在我進入的每個單元格中,如果我按下轉義鍵當前行將被刪除,您所做的事件名爲Public Event EscapeOnFirstRowPressed,並且沒有問題,並將控制權交給每個初始狀態。從DataGridView中刪除行

這個過程的總體思路是,當所有的細胞都滿足,則

  • 將數據寫入SQL表和
  • 刪除當前行,所以用戶現在可以導入新數據。

由於寫入過程是好的,我把我的興趣轉移到該行。

我說這個動作需要從RowValidated sub或從CellEnter(當我離開當前行併到達下一行時發生)調用它。但在任何地方,如果我把我收到以下錯誤

DGV.Rows.RemoveAt(0) {"Operation cannot be performed in this event handler."} 

我嘗試另一種過程,這個動作命令

If Not DGV.CurrentCell.EditedFormattedValue = "" Then 
      If Not DGV.Rows(RowIndex).IsNewRow Then 
       DGV.Rows.RemoveAt(RowIndex) 
       DGV.Refresh() 
      End If 

     ElseIf DGV.CurrentCell.EditedFormattedValue = Nothing Then 
      If Not DGV.Rows(RowIndex).IsNewRow Then 
       DGV.Rows.RemoveAt(RowIndex) 
       DGV.Refresh() 
      End If 
     End If 

。我儘量模擬給予以下命令

Dim myKeyData As System.Windows.Forms.Keys 
Dim myMsg As System.Windows.Forms.Message 
    myKeyData = Keys.Escape 
ProcessCmdKey(myMsg, myKeyData) 

的按鍵響應行動,但我收到同樣的錯誤,當指針是當我按下Esc鍵來執行其執行相同的指令。

回答

1

通過調用BeginInvoke,您可以在事件處理程序完成後,在下一個消息循環中執行代碼。

+0

感謝您的關注,請更具體。當我會這樣做?在CellValidated的結尾?或之後RowValidated?請你幫助我如何使用BeginInvocke,因爲我試圖做到這一點,但我無法做出任何積極的結果。 – 2011-02-17 16:25:50