我有WinForms DataGridView
,其源設置爲SortableBindingList
。在這種形式下,有Comment
列,我需要阻止用戶插入一些字符,從而驗證。DataGridView - 單元驗證 - 防止CurrentRow/Cell更改
我想要做的是,每當用戶輸入無效值時,系統會通知他(OnNotification('You entered wrong comment');
)並強制他/她保持編輯模式。
到目前爲止,我建立的解決方案是這樣的:
void MyDataGridView_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
if (e.ColumnIndex == ColumnComment.Index) {
object data = Rows[e.RowIndex].Cells[e.ColumnIndex].Value;
if((data != null) && (!CommentIsValid(data.ToString()))){
CurrentCell = Rows[e.RowIndex].Cells[e.ColumnIndex];
BeginEdit(true);
// My notification method
OnNotification(String.Format("Comment `{0}` contains invalid characters));
return;
}
}
}
我有以下這個問題:
OnCellValidating
被觸發,只有當整個表單被關閉或噹噹前行發生改變,而不是之後我完成編輯單個單元格,所以我已將支票放入CellEndEdit
。- 當我使用
Enter
/Esc
來結束編輯時,它按預期和想要的方式工作。 - 當我使用鼠標並單擊另一行時,單元格保持編輯模式,但另一行被選中。
- 當我嘗試使用
Enter
(顯示無效意見通知),然後Esc
(取消編輯)它使用值通過Enter
推(因爲編輯模式已完成)。
所以我的問題是:
- 我怎麼能每個單元格編輯後火
CellValidating
,而不是當窗體關閉 - 如何防止
CurrentRow
和CurrentCell
變化甚至鼠標點擊之後? - 如何強制單元格在編輯模式下逗留?
不幸的是,它並沒有完全適用於我,因爲CellContentClick事件處理程序中的代碼從未將控制權設置回被驗證的單元格,儘管如此,儘管使用全局變量isInvalidState和' invalidCell'幫助我構建了另一個完美的解決方案,我將盡快在此發佈我的解決方案。 – 2017-09-05 17:09:13