下面的代码实现了自定义排序算法。 接管了 TreeList.CompareNodeValues 事件来实现此目的。 所实现的排序机制把有子节点的节点排列在上面,而把没有子节点的节点排列在下面。

下面的插图显示了按照 Department 列以升序和降序排序的控件。 注意, Finance 节点始终位于有子节点的节点的下面。

C#CopyCode image复制代码
using DevExpress.XtraTreeList;

private void treeList1_CompareNodeValues(object sender, CompareNodeValuesEventArgs e) {
   if (e.Node1.HasChildren && !e.Node2.HasChildren) 
      e.Result = e.SortOrder == SortOrder.Ascending ? -1 : 1;
   if (!e.Node1.HasChildren && e.Node2.HasChildren) 
      e.Result = e.SortOrder == SortOrder.Ascending ? 1 : -1;
}

Visual BasicCopyCode image复制代码
Imports DevExpress.XtraTreeList
Private Sub TreeList1_CompareNodeValues(ByVal sender As Object, _
ByVal e As CompareNodeValuesEventArgs) Handles TreeList1.CompareNodeValues
   If e.Node1.HasChildren And Not e.Node2.HasChildren Then
      e.Result = IIf(e.SortOrder = SortOrder.Ascending, -1, 1)
   End If
   If Not e.Node1.HasChildren And e.Node2.HasChildren Then
      e.Result = IIf(e.SortOrder = SortOrder.Ascending, 1, -1)
   End If
End Sub