2012-11-07 19 views
2

我有一個DataGridView與自定義DataGridViewColumn。該列正在託管第三方組件。我在單元格中輸入編輯模式並修改其值,然後按Enter鍵驗證值。問題是我必須按兩次Enter鍵來驗證值。看起來第一個輸入鍵是驗證單元中託管的第三方編輯器中的值,第二個驗證DataGridView的單元格......那麼如何驗證單元格的值,只需按一次Enter鍵?驗證自定義datagridviewCell單元格的值

此外,我也看到了奇怪的行爲,例如,最後的DataGridView的行不像其餘的DataGridView的單元格。對於最後一行,如果我編輯單元格的值,然後按Enter鍵進行驗證,則在驗證值後,它始終保持在同一單元格中,並且在編輯模式下,單元格的值將被選中,因此用戶可以認爲單元格值在事實上並非如此。這在其餘的行中不會發生。他們需要按兩次確認鍵才能生效,並且細胞在驗證後不會保留在編輯模式下。

編輯: 至於到需要按ENTER鍵兩次: 在自定義單元格,當鍵被按下第一次進入,它提出了,說的單元格值已更改的事件,它是在這種情況下,OnSourceValueChanged(這是提高了,當值已經改變了第三方的情況下),所以進去我做的:

 this.valueChanged = true; 
     this.EditingControlDataGridView.NotifyCurrentCellDirty(true); 
     base.OnSourceValueChanged(e); 

當執行NotifyCurrentCellDirty它提出了對datagridview的哪些代碼是CurrentCellDirtyStateChanged:

  if (this.gridView.IsCurrentCellDirty) 
     { 
      this.gridView.CurrentCell.DataGridView.EndEdit(DataGridViewDataErrorContexts.Commit); 
      this.gridView.EndEdit(DataGridViewDataErrorContexts.Commit); 
     } 

之後,datagridview引發DataError事件,但單元格繼續編輯模式,所以我想提交值並退出編輯模式。這個怎麼做?我也試過:

this.dataGridView.CurrentCell.DataGridView.EndEdit(DataGridViewDataErrorContexts.Commit); 

this.dataGridView.EndEdit(DataGridViewDataErrorContexts.Commit);

在DataError處理程序中,但它不起作用。

最後,不會引發cellvaluechanged,因爲它是單元格中的託管控件......我不明白爲什麼我必須按兩次Enter鍵來提交和驗證單元格上的更改並退出編輯模式細胞。我只想按回車鍵一次。

也許原因是在CurrentCellDirtyStateChanged提交後發生錯誤。引發DataError事件報告提交錯誤。另外,如何避免提交錯誤?發生什麼事?

+0

SendEnter Key在cellvalue changed事件中是一種方法。你不介意嗎? – Sami

回答

0

您可以在CellValueChanged事件中實現您的單元驗證邏輯。一旦單元格的值被編輯,該事件將被觸發。

+0

當按下輸入鍵時,如何處理,然後當按下輸入鍵時,以編程方式驗證當前單元格的值?也許用KeyPress事件?以及爲什麼在最後一行中,驗證一個單元格後,它始終保持在同一個單元格中? – user1624552

+0

只要你按下輸入這個CellValueChanged事件將被調用。 – Vasanthan

+0

請看我的編輯帖子。我更詳細地解釋了發生的事情。 – user1624552