Исключение Datagridview: «Повторный вызов» на DGV.Clear

Я понял. Datagridview не может НИЧЕГО изменить. Я так не думаю, но все же иногда получаю это исключение. Вот что так странно. Более чем в 90 +% случаев он работает нормально.

У меня есть элемент управления вкладками в форме Windows, а на нескольких страницах вкладок есть элементы управления представлением сетки данных. Ни один из них не привязан к базе данных. Когда пользователь перемещается по страницам вкладок, появляется код для каждого события входа и выхода страницы вкладки. При входе на вкладку, если есть элемент управления DGV, появляется строка кода для очистки всех строк.

Private Sub Tab3_Plan_Enter(ByVal sender As Object, ByVal e As System.EventArgs) _
    Handles Tab3_Plan.Enter

        dgPlan.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells
        CircuitItems = LoadCatalogItems(dgPlan, cbVDSvcLocation, iKind.PlanSku)
        ' More event code

Private Function LoadCatalogItems(ByRef DGV As DataGridView, _
                    ByVal cbControl As System.Windows.Forms.ComboBox, _
                    ByRef ItemKind As Integer) As Integer
        Dim DescDGName As String
        Dim OrigInternalDesc As String
        Dim DisplayDesc As String

        DGV.Rows.Clear()   ' <-- This is where the exception is thrown
        ' More function code

Может ли AutoSizeRowMode в обработчике событий Tab3_Plan_Enter иметь какое-либо отношение к этому? Если да, то как я могу это преодолеть? Будет ли хорошей идеей переупорядочить две строки кода в Tab3_Plan_Enter?


person Ebassador    schedule 16.10.2015    source источник


Ответы (1)


Это исключение возникает, когда вы пытаетесь что-то сделать с ячейкой, которая используется в данный момент.

Попробуйте добавить Thread.Sleep (5000) после DGV.Rows.Clear (), чтобы дать ему некоторое время для очистки DataGridView. Поскольку вы сказали, что это случается только иногда, возможно, в DataGridView слишком много строк и требуется время, чтобы все очистить. Поскольку впоследствии вы, вероятно, добавите больше строк, это возможный сценарий.

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

person Diego Bauleo    schedule 16.10.2015
comment
Я думаю, вы имели в виду перед DGV.Rows.Clear. Я попробую. Может пройти некоторое время, прежде чем я узнаю, решит ли это проблему. - person Ebassador; 20.10.2015