DataGridView RowValidating срабатывает после выбора другого элемента управления.Любое решение? - PullRequest
0 голосов
/ 15 августа 2011

Использование событий RowValidating работает нормально.

Но если я щелкну где-нибудь в сетке данных без изменения строки, событие всегда запускается после выбора другого элемента управления.

Образец-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() в Binding до запуска SetSelectedRowCore.

1 Ответ

1 голос
/ 15 августа 2011

Я нашел маленький грязный обходной путь:

    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.

Затем я проверяю, нажата ли ячейка.(Ложь -> Завершено)

По крайней мере, я проверяю, является ли ячейка / строка, по которой щелкнули, не текущая (Ложь -> Закончено | Истина -> Подтвердить)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...