Ошибка: «Операция не может быть выполнена в этом обработчике событий» при установке значения в виде сетки - PullRequest
1 голос
/ 24 января 2011

Я пытаюсь добавить значения из Arraylist в определенный столбец сетки.as:

If (Arr_NewContacts.Count > 0) Then
            dgvStayout.Rows.Clear() ' **GETTING ERROR HERE** 
            dgvStayout.Rows.Insert(0, (Arr_NewContacts.Count - 1))
            For i As Integer = 0 To Arr_NewContacts.Count - 1
                dgvStayout.Rows(i).Cells("Name").Value = Arr_NewContacts(i).ToString
                dgvStayout.Rows(i).Cells("CheckIn Date").Value = Date.Today
                dgvStayout.Rows(i).Cells("CheckOut Date").Value = Date.Today
                IsStayGrid_added = True
            Next
End If

Свойство Datagrid, например AllowUserToAddRows и AllowUserToDeleteRows, уже установлено в true:

Я использую приведенный выше код для события потери фокуса одного из текстовых полей.

Спасибо

1 Ответ

4 голосов
/ 28 июля 2011

Сегодня утром я столкнулся с подобной проблемой и выяснил причину этого исключения. Я взглянул на источник DataGridView и обнаружил, что в методах очистки столбцов и строк код проверяет внутреннее свойство с именем NoDimensionChangeAllowed. Если это false, то InvalidOperationException генерируется с сообщением «Операция не может быть выполнена в этом обработчике событий».

Я нашел там восемь обработчиков событий DataGridView, в которых затрагивается это свойство, и вы не можете изменять количество строк или столбцов:
CellEnter
CellLeave
CellValidated
CellValidating
RowEnter
RowLeave
RowValidated
RowValidating

Поэтому вам необходимо убедиться, что этот блок кода не запускается ни в одном из этих обработчиков. Если вы должны запустить код в результате одного из этих событий, вам нужно запустить его через BeginInvoke, как предлагается здесь: Ошибка проверки, но не может быть удалена в DataGridView

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