0

我有一个由数据表填充的 flexgrid。然后我按指定的列分组并添加节点以使用 treeview 属性。问题是,例如,如果我有 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 是我分组的列的名称,level 是节点的级别(我在这里总是使用 0,因为我只想要一层)。我在想的是,如果有办法让 for 循环运行到数据表结束,那将是最好的解决方案。感谢您的任何帮助。

4

1 回答 1

0

经过更多的研究和与一些开发人员的一些合作,我找到了非常简单的解决方案,所以我将它发布在这里,因为我无法在网上找到关于这个主题的大量研究。问题是循环没有到达网格的末尾,因为随着节点的创建,行数增加了。对此的解决方案是在之前添加相同的 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

于 2019-12-12T23:51:35.810 回答