我有一個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事件報告提交錯誤。另外,如何避免提交錯誤?發生什麼事?
SendEnter Key在cellvalue changed事件中是一種方法。你不介意嗎? – Sami