2010-03-24 58 views
4

我在窗體上有一個WinForms DataGridView控件。有在此DataGridControl兩個字段:在哪個事件之後,我應該在DataGridView中編輯單元格後執行操作?

  • Email Address
  • Resolved Email Address(計算基於在Email Address輸入)

用戶輸入之後或改變Email Address的值,我想在值Resolved Email Address基於單獨的方法進行更新。我應該配什麼事件以便在更新Email Address單元格後更新Resolved Email Address單元格?

我不知道放在哪裏事件,因爲用戶可以添加/更改值後,做了一些事情:標籤到下一個單元格,單擊取消在窗體上,單擊窗體等就ok了有任何想法嗎?

+0

'DGV' databound?你在使用'DataTable'還是'List'? – Vivek 2010-03-24 15:15:11

+0

@Vivek當表單加載時,它將數據綁定到DataTable。 – 2010-03-24 15:18:44

回答

1

這裏是我做了什麼:

使用的dataGridView的CellBeginEdit和CellEndEdit事件來控制的事情。如果您正在編輯電子郵件地址單元格並將其選中,它將觸發CellEndEdit事件。

你應該得到一個CellEndEdit事件,當你點擊這些按鈕中的一個按鈕單擊事件 - 在我的測試中,我總是得到CellEndEdit第一,但我想因人而異。

如果有一些無效時CellEndEdit發生時,你可以一定保持OK /被執行取消代碼。


此外,你可以當值無效使用CellValidating事件和e.Cancel事件。這將使按鈕點擊事件不會觸發,並讓您進入編輯的單元格。

1

CellValueChanged火災時,在編輯完成後,例如當用戶導航離開小區時。

+0

如果用戶單擊「確定」或「取消」按鈕,如果在「單元格值已更改」事件中某些內容無效,是否有辦法停止觸發這些相應事件? – 2010-03-24 15:05:29

+0

@Ben McCormack:看到tsmatt的回答。 – AxelEckenberger 2010-03-24 16:17:37

1

有關你正在嘗試做的事件的順序是:

  • 1)CellValidating

  • 2)CellValueChanged

  • 3)CellValidated

  • 4)CellEndEdit

我會建議使用CellValidating如果要防止基於該單元格的內容採取進一步的行動,因爲在CellValidating,你可以設置包含在DataGridViewCellValidatingEventArgs爲true e.Cancel標誌,它會自動返回控制到該小區。

如果你只是想更新顯示(解析電子郵件名稱)的使用CellValueChanged

 

private void myDataGridView_CellValueChanged(object sender, DataGridViewCellEventArgs e) 
{ 
    e.Cancel = (!validateMyInput(e.FormattedValue.ToString()); 
} 
相關問題