找回密码
 立即注册

QQ登录

只需一步,快速开始

wisdom

葡萄城公司职员

2

主题

26

帖子

62

积分

葡萄城公司职员

积分
62

活字格认证

最新发帖
wisdom
葡萄城公司职员   /  发表于:2014-4-4 17:47  /   查看:8184  /  回复:8
在使用C1FlexGrid的树结构时,希望所有的节点按照指定的列进行排序,当然在排序时,节点之间的父子关系不能改变。也就是说每个节点的子节点是按指定列排序的。
我使用了Node的Sort()方法,但是似乎不起作用。我的代码,大致可以如下表示。
        For i As Integer = 0 To Me.DS.Tables(0).Rows.Count - 1
            Dim level As Integer = Me.DS.Tables(0).Rows(i)("divi_path").ToString().Split("\").Length
            Dim nd As C1.Win.C1FlexGrid.Node = Me.grid.Rows.AddNode(level - 1)
            nd.Row("Division") = Me.DS.Tables(0).Rows(i)("divi_short_name")
            nd.Row("Divi_Display_Order") = Me.DS.Tables(0).Rows(i)("Divi_Display_Order")
            'Divi_Display_Order列的索引号是1,以下代码是希望子节点,按照Divi_Display_Order列排序
            nd.Sort(SortFlags.Ascending, 1, 1)
        Next
逝者已矣 来者可追

8 个回复

倒序浏览
wisdom
葡萄城公司职员   /  发表于:2014-4-4 17:58:00
沙发
另外,grid.Tree.Sort()只能在指定的level上进行排序,这个是不能满足需求的。
逝者已矣 来者可追
回复 使用道具 举报
roger.wang
社区贡献组   /  发表于:2014-4-8 16:53:00
板凳
回复 2楼wisdom的帖子

抱歉,无这样的接口。

目前只能一个节点的同level排序。

所要以列所有节点排序,只能自行写代码实现排序--即排序数据、重新加载树节点。
回复 使用道具 举报
wisdom
葡萄城公司职员   /  发表于:2014-4-9 15:03:00
地板
那么Node.Sort()方法的作用是什么呢?
逝者已矣 来者可追
回复 使用道具 举报
roger.wang
社区贡献组   /  发表于:2014-4-10 10:31:00
5#
回复 4楼wisdom的帖子

Sort Method (Node)  API使用说明如下:
Overload Description
Sort(SortFlags,Int32,Int32) Sorts this node's child nodes in the specified order.   
Sort(SortFlags) Sorts this node's child nodes in the specified order.   
Sort(IComparer) Sorts this node's child nodes using a given System.Collections.IComparer object to determine the node order.   


http://helpcentral.componentone. ... /#undoingasort.html
回复 使用道具 举报
wisdom
葡萄城公司职员   /  发表于:2014-4-10 17:46:00
6#
這段幫助我早已經看過了,所以才會這么寫代碼。
也許我沒有說清楚,其實我的意思是Node.Sort()方法不起作用。我希望知道為什么?
有沒有辦法讓Node.Sort()方法生效?
逝者已矣 来者可追
回复 使用道具 举报
roger.wang
社区贡献组   /  发表于:2014-4-11 12:02:00
7#
回复 6楼wisdom的帖子

失效了?  Node.Sort()

请参考在线demo--C1FlexGrid中树控件排序。

  1. private void SortNodes(bool desc)
  2.         {
  3.             if (flex.Row < 0)
  4.                 return;

  5.             // get current node
  6.             Node nd = flex.Rows[flex.Row].Node;

  7.             // apply sorting selected by the user
  8.             // (this will sort the selected node's children)
  9.             if(desc)
  10.                 nd.Sort(SortFlags.Descending);
  11.             else
  12.                 nd.Sort(SortFlags.Ascending);

  13.             // done
  14.             flex.Focus();
  15.         }
复制代码
回复 使用道具 举报
wisdom
葡萄城公司职员   /  发表于:2014-4-11 15:54:00
8#
我已经找到了原因。
Node.Sort()在某些情况下产生的结果不是预期的。
1、首先不能一边构造树一边对每个节点调用Node.Sort()方法,如果这样不会得到预期的效果。上面我给出的demo就是这么做的,因此感觉是Node.Sort()方法失效了。
2、如果没有根节点,那么第一层节点的排序结果是错误的
如下图所示,是按照【顺序】列排序的,但是下图红框部分的2、4两个节点的位置不对。
这种情况下,必须再调用一下Me.grid.Tree.Sort()对 level 0 进行排序,才能得到正确结果。


有跟节点时,排序结果是正确的,如下图所示



示例代码如下:
  1.    
  2.     Private Sub frmGrid_Load(sender As Object, e As EventArgs) Handles MyBase.Load
  3.         FillTree()
  4.         SetTreeStyle()
  5.     End Sub

  6.    Sub FillTree()
  7.         'Dim root As Node = Me.grid.Rows.AddNode(0)
  8.         'root.Row("name") = "root"
  9.         'root.Row("Display_Order") = 0
  10.         'root.Sort(SortFlags.Ascending, 1, 1)

  11.         For i As Integer = 0 To Me.DiviDataSource.Tables(0).Rows.Count - 1
  12.             Dim level As Integer = Me.DiviDataSource.Tables(0).Rows(i)("path").ToString().Split("\").Length
  13.             Dim row As Node = Me.grid.Rows.AddNode(level - 1)
  14.             row.Row("name") = Me.DiviDataSource.Tables(0).Rows(i)("name")
  15.             row.Row("Display_Order") = Me.DiviDataSource.Tables(0).Rows(i)("Display_Order")
  16.         Next

  17.     End Sub

  18.     Sub SetTreeStyle()
  19.         For Each nd As Row In Me.grid.Rows
  20.             If nd.IsNode Then
  21.                 nd.Node.Sort(SortFlags.Ascending, 1, 1)


  22.                 '.......................

  23.             End If
  24.         Next
  25.         Me.grid.Tree.Sort(0, SortFlags.Ascending, 1, 1)
  26.     End Sub
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
逝者已矣 来者可追
回复 使用道具 举报
roger.wang
社区贡献组   /  发表于:2014-4-11 18:20:00
9#
回复 8楼wisdom的帖子

谢谢案例分享, UI做的不错。

精华帖一枚!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部