FlexGrid Tree не создает узлы для всей сетки

У меня есть flexgrid, заполняемый таблицей данных. Затем я группирую по указанному столбцу и добавляю узлы для использования свойства дерева. Проблема, например, в том, что если у меня есть 1000 записей, и они разбиваются на 20 групп, в конце у меня будет 20 записей, которые просто добавляются в последний узел, потому что он перестает отслеживать 1000 строк, ВКЛЮЧАЯ узлы, которые он создан, что означает, что он будет думать, что в сетке 1020 строк. Вот функция, которую я использую для создания узлов:

Private Sub GroupBy(ByVal colName As String, ByVal level As Integer)
        Dim current As Object = ""
        For i As Integer = fgResults.Rows.Fixed To _data.Tables("Results").Rows.Count - 1
            If Not fgResults.Rows(i).IsNode Then
                Dim value As Object = fgResults.Item(i, colName).ToString
                If Not Object.Equals(value, current) Then
                    fgResults.Rows.InsertNode(i, level)
                    fgResults.Item(i, colName) = value
                    current = value
                End If
            End If
        Next
    End Sub

colName — это имя столбца, по которому я группирую, уровень — это уровень узла (здесь я всегда использую 0, так как мне нужен только один слой). Я думаю, что если есть способ запустить цикл for до конца таблицы данных, это будет лучшим решением. Спасибо за любую помощь.


person josh42    schedule 11.12.2019    source источник


Ответы (1)


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

        For i As Integer = fgResults.Rows.Fixed To _data.Tables("Results").Rows.Count - 1
            If Not fgResults.Rows(i).IsNode Then
                Dim value As Object = fgResults.Item(i, colName).ToString
                If Not Object.Equals(value, current) Then
                    count += 1
                    current = value
                End If
            End If
        Next

Затем я изменил цикл for, который у меня есть выше, чтобы включить этот счетчик: For i As Integer = 1 To _data.Tables("Results").Rows.Count + count

person josh42    schedule 12.12.2019