我DataGridView
有源设置为SortableBindingList
. 在这种形式中,有列Comment
,我需要防止用户插入一些字符,从而进行验证。
我想要做的是,每当用户输入无效值时,系统都会通知他(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
仅在整个表单关闭或当前行更改时触发,而不是在我完成单个单元格的编辑后触发,因此我已将 check 放入CellEndEdit
.- 当我使用
Enter
/Esc
结束编辑时,它按预期工作。 - 当我使用鼠标单击另一行时,单元格保持编辑模式,但另一行被选中。
- 当我尝试使用
Enter
(显示无效评论通知)然后Esc
(取消编辑)它使用推送的值Enter
(因为编辑模式已完成)。
所以我的问题是:
- 如何
CellValidating
在每次单元格编辑后触发,而不是在表单关闭时触发 - 即使在鼠标单击后如何防止
CurrentRow
和更改?CurrentCell
- 如何强制单元格保持编辑模式?