对以树状结构表示的数据进行排序
基本上,按照列值对表中的数据排序会导致按升序或降序排列列值。 这是适用于以单表形式显示数据的控件的标准数据排序方法。 但是不能在 TreeList 控件中执行这种排序方法,因为在大多数情况下,这可能导致破坏树状数据表示形式。 因此,XtraTreeList 使用的排序算法与上面描述的不同。
XtraTreeList 控件中的每行都有包含在树中的嵌套层级。 为了保持树状结构,行被排序时要考虑其嵌套层级。 首先,按照列值对根层级的行进行排序。 注意,在完成此操作之后,根层级的行还没有被连续排列。 它们被子行彼此分隔开。 然后,对每个根节点的直属子行进行排序 (注意,分别对每个根结点的子行进行排序)。 接下来对第二层级的行重复该种排序处理,依此类推,直至全部层级都已经被排序。 一旦完成排序,每个嵌套层级的行就都被排列在它们的组中。 (组是有相同父行的行的集合)。
下面的插图显示了在 XtraTreeList 控件中的原始数据,以及在按照列值排序之后的布置。
按照多个列的取值对数据排序
XtraTreeList 控件能够按照多个列的取值对数据排序。 我们考虑按照两个列排序的情形。 当按照第一个列的取值对数据排序时,如同上面所述的那样重新排列数据。 按第二个列排序时,只影响属于第一个列的相同组中有相同取值的记录顺序。
下面的插图显示了当按照第二个列排序时对顺序的影响。 最初是按照 Budget 列排序的。 但是,该列的相同的组中包含相同的取值。 因此,在排序中包括 Location 列会改变受影响行的顺序。
注意,仅当前两个排序列的相同组中的行包含相同取值时,才需要按照第三个列排序。