使用RowValidating事件可以正常工作。
但是,如果我点击datagridview中的某个位置而不更改行,则在选择另一个控件后总会触发事件。
Sample-1(正确):
Selecting a Row -> Selecting a Textbox -> Selecting antoher Row |->RowValidating raised
样本-2(不正确):
Selecting a Row -> Clicking the Columnheader -> Selecting a Textbox -> Selecting antoher Row |->RowValidating raised |->RowValidating raised
示例3(不正确):
Selecting a Row -> Clicking empty Area -> Selecting a Textbox -> Selecting antoher Row |->RowValidating raised |->RowValidating raised
有没有办法在一行真正改变之前才获得RowInvalidating?
我已经尝试覆盖SetSelectedRowCore
并且能够取消选择更改,但是数据网格视图会在EndEdit()
被触发之前将SetSelectedRowCore
发送到绑定。
答案 0 :(得分:1)
我发现了一个有点脏的解决方法:
private void dataGridView_RowValidating(object sender, DataGridViewCellCancelEventArgs e) {
Point pos = dataGridView.PointToClient(Control.MousePosition);
DataGridView.HitTestInfo hi = dataGridView.HitTest(pos.X, pos.Y);
if (hi.Type == DataGridViewHitTestType.Cell && hi.RowIndex != e.RowIndex) {
e.Cancel = !AllowChangeCurrent(); //Check if changing selection is allowed
}
}
首先,我在DataGridView中获得当前鼠标位置。
然后我检查是否单击了一个单元格。 (假 - >完成)
至少我检查点击的单元格/行是不是当前的(False - > Finished | True - > Validate)