我已经找到了原因。
Node.Sort()在某些情况下产生的结果不是预期的。
1、首先不能一边构造树一边对每个节点调用Node.Sort()方法,如果这样不会得到预期的效果。上面我给出的demo就是这么做的,因此感觉是Node.Sort()方法失效了。
2、如果没有根节点,那么第一层节点的排序结果是错误的
如下图所示,是按照【顺序】列排序的,但是下图红框部分的2、4两个节点的位置不对。
这种情况下,必须再调用一下Me.grid.Tree.Sort()对 level 0 进行排序,才能得到正确结果。
有跟节点时,排序结果是正确的,如下图所示
示例代码如下:
-
- Private Sub frmGrid_Load(sender As Object, e As EventArgs) Handles MyBase.Load
- FillTree()
- SetTreeStyle()
- End Sub
- Sub FillTree()
- 'Dim root As Node = Me.grid.Rows.AddNode(0)
- 'root.Row("name") = "root"
- 'root.Row("Display_Order") = 0
- 'root.Sort(SortFlags.Ascending, 1, 1)
- For i As Integer = 0 To Me.DiviDataSource.Tables(0).Rows.Count - 1
- Dim level As Integer = Me.DiviDataSource.Tables(0).Rows(i)("path").ToString().Split("\").Length
- Dim row As Node = Me.grid.Rows.AddNode(level - 1)
- row.Row("name") = Me.DiviDataSource.Tables(0).Rows(i)("name")
- row.Row("Display_Order") = Me.DiviDataSource.Tables(0).Rows(i)("Display_Order")
- Next
- End Sub
- Sub SetTreeStyle()
- For Each nd As Row In Me.grid.Rows
- If nd.IsNode Then
- nd.Node.Sort(SortFlags.Ascending, 1, 1)
- '.......................
- End If
- Next
- Me.grid.Tree.Sort(0, SortFlags.Ascending, 1, 1)
- End Sub
复制代码 |