因为最近公司要做一个内Q,(内部使用的)
将所有人员加载到了TreeView上,现在要做的事根据item里的data来排序,如IsOnLine=0的排序前,然后是=1的,最后是=2的这样,但是部门的节点不变
我现在只知道可以用SortType属性来排,里面有四个可选属性,分别是:StNone,StText,StData,StBoth
应该是可以根据节点里的指针变化来排的,可是我不懂,所以在这里请教各位朋友了。
请不吝赐教,谢谢。

解决方案 »

  1.   

    用cxDbtreelist来做吧,,很简单
      

  2.   

    我觉得应该是在加载的时候,即建树的时候就排序。
    需要重排的时候,重新建树。
    这样比较简单。组织好你的SQL语句即可。
      

  3.   


    这也是一种方按吧,但是如果装了DEV控件的话就直接用DBTREELIST控件就好了,,只要绑定数据源,可以任意排序,而且不用加代码的情况下
      

  4.   

    重写OnCompare事件,在此事件中procedure(Sender: TObject; Node1, Node2: TTreeNode; Data: Integer; var Compare: Integer) 可以获得参与比较的Node1和Node2对象,通过给返回值Compare赋值,决定Node1与Node2的大小顺序.例如
    Compare := CompareText(Node1.text, Node2.text);另外SortType是配合OnCompare使用的,StNone,StText,StData,StBoth各表示
    StNone不改变顺序
    StText当Node的Text属性发生变化时,调用OnCompare重新排序
    StData当Node的Data属性发生变化时(必须是改变指针指向),调用OnCompare重新排序
    StBoth当Node的Text或Data属性发生变化时,调用OnCompare重新排序
      

  5.   

    DBTREE我以前也用过,但是现在用什么控件不是我说了算了
    加上楼上的朋友说用SQL来处理,这我想只能处理父节点的先后顺序,不能处理子节点的先后顺序吧
    而且我不能每时每刻去查数据库谁谁上线了.
    现在是用TLIST来处理的.
    所以DBTREE是不实际的.
      

  6.   

    sql的功夫,每次排序后,重新加载树