树型控件排序

2017-09-15 14:59:44
黄善超
3178
最后编辑:tmtony8 于 2017-09-15 15:24:52

ctTree控件能够以任一列排序。这可通过两种不同的方法实现。第一种是标记一列为可排序列 (在创建列头的设计时做) 然后单击你想排序的列头。第二种是使用排序方法。当可见列被排序时,排序将会以列项目的字符数据为准。

排序也可以基于所有节点数据或只是一个父节点的子节点。排序方法的第二个参数用于确定如何进行排序。

 

非字符型数据排序

默认情况下, 数据是基于字符数据排序。但是, 当我们需要对整数,实数与日期进行排序时,这就不够了。在这种情况下,我们可以设置ColumnDataType属性匹配需要排序的数据类型。控件将自动以适当的方式排序。

 

树也能基于NodeCargo NodeData属性排序。举个例子, 下例中每当列2排序时,将会基于NodeData属性排序。

 

Private Sub ctTree_PreSort( ByVal nColumn as Integer )
           If ( nColumn = 2 )
               ctTree.SortNewColumn -1
           End If
 End Sub

 

如果-1值提供给SortColumnSortNewColumn 属性/方法, 排序将基于NodeData 属性中的数据进行。 如果-2值提供给该属性, 排序将基于NodeCargo属性中的数据进行。

 

注意:ctTree中不可能隐藏列, 不过你可以给不存在的列分配文本并且基于那笔数据排序。举个例子, 你可以定义3列但是为四列的每个列项目提供文本。如果我们基于第四列排序列表,我们本质上是以隐藏的列排序。

 

多列排序

允许同时排序至多三列。SortMultiColumns(多列排序)方法允许程序员指定至多三个不同列被排序。 即可用内部的也可用外部的PreSort方法。举例:

Private Sub ctTree_PreSort( ByVal nColumn as Integer )
    if ( nColumn = 2 )
        ctTree.SortMultiColumns nColumn, 3, 4
    End If
End Sub

ctTree.SortMultiColumns 1, 3, 4
ctTree.SortList

 

以下项目涉及控件排序:

 

项目                                                                   类型                         访问属性

列头已经单击之后禁止列排序                            void                           CancelSort

确定列是否可排序                                            boolean                      ColumnSortable

用于中断排序过程的事件                                     none                        PreSort

显示排序方向箭头                                          boolean                         SortArrows

排序列                               .                               integer                       SortColumn 

升序还是降序                                                     integer                       SortDirection

指定当前列表是否已排序                                  boolean                       Sorted

在树中排序数据                                                 boolean                      Sort

将要运行排序的数据列,仅在PreSort事件中有效 .  integer                     SortNewColumn

确定排序是否对事件敏感            .                     boolean                       SortOnCase