选择另一个控件后,DataGridView RowValidating将触发。任何解决方法?

时间:2011-08-15 11:33:55

标签: c# .net winforms datagridview

使用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发送到绑定。

1 个答案:

答案 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)