Tino Fourie Ответов: 1

Цикл через динамический datagridview -. rowcount (+) меняется во время цикла через него


(Приложение Windows Forms использует VB.Net)

У меня есть DataGridView со строками, отображающими расстояние и расчетное время между двумя точками, называемыми данными отрезка маршрута. Я реализовал CheckBox если Selected он должен зацикливаться на данных отрезка маршрута и Insert данные шага ноги ниже текущих данных ноги маршрута.

Если флажок установлен Not Selected, петля удалит все данные шага ноги-эта часть работает хорошо.

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

Я старался для каждого, ибо...Далее и в то время как циклы, чтобы попытаться выполнить цикл через динамически изменяющийся DataGridView. Это похоже на то, как если бы начало цикла делало снимок количества строк (RowCount) в начале цикла и сохраняло исходное количество строк в начале выполнения цикла.

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

Private Sub chkShowRouteStep_CheckedChanged(sender As Object, e As EventArgs) Handles chkShowRouteStep.CheckedChanged
        Try
            If chkShowRouteStep.Checked Then
                'Show Leg Steps
                For i As Integer = 0 To dgvQuote.RowCount - 1
                    txtRowCount.Text = i
                    If dgvQuote.Rows(i).Cells(0).Value.ToString <> "" Then
                        For j As Integer = 1 To 5
                            dgvQuote.Rows.Insert(i + j, "Step")
                        Next
                    End If
                    i += 1
                Next


            Else
                'Hide Leg Steps
                For i As Integer = dgvQuote.RowCount - 1 To 0 Step -1
                    If dgvQuote.Rows(i).Cells(0).Value.ToString = "Step" Then
                        dgvQuote.Rows.RemoveAt(i)
                    End If
                Next
            End If
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
    End Sub


Есть ли способ, где я могу сделать петлю все строки, даже те, что были добавлены после запуска цикла?

Что я уже пробовал:

Цикл for
Цикл for each
Цикл while

Richard MacCutchan

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

Tino Fourie

Ричард, спасибо за ответ. Я пропустил оператор i += 1 в блоке кода, когда вставлял код поперек. Я отредактировал этот пост, чтобы включить шаг цикла For.

1 Ответов

Рейтинг:
2