下面的示例展示了如何创建一个操作类,折叠子节点中不包含指定节点的所有节点。 结果只有该节点的父节点被展开。

这个操作类接受节点作为它的构造函数的参数,并把节点存储到一个内部字段中。 Execute 方法检查被处理的节点是否包含指定的节点作为子节点。 如果不包含,则折叠被处理的节点。 在操作类中也重写了 TreeListOperation.NeedsFullIteration 属性,仅处理有子节点的节点。 当使用大型而复杂的节点结构时,这样处理能提升性能。

下面的插图展示了在执行示例代码之前和之后的树状列表:

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

public class CollapseExceptSpecifiedOperation : TreeListOperation {
   TreeListNode visibleNode;
   public CollapseExceptSpecifiedOperation(TreeListNode visibleNode) : base() {
      this.visibleNode = visibleNode;
   }
   public override void Execute(TreeListNode node) {
      if (!visibleNode.HasAsParent(node))
         node.Expanded = false;
   }
   public override bool NeedsFullIteration { get { return false; } }
}

//...

treeList1.NodesIterator.DoOperation(new CollapseExceptSpecifiedOperation(treeList1.FocusedNode));
Visual BasicCopyCode image复制代码
Imports DevExpress.XtraTreeList.Nodes
Imports DevExpress.XtraTreeList.Nodes.Operations

Public Class CollapseExceptSpecifiedOperation
    Inherits TreeListOperation
    Private visibleNode As TreeListNode

    Public Sub New(ByVal visibleNode As TreeListNode)
        Me.visibleNode = visibleNode
    End Sub 'New

    Public Overrides Sub Execute(ByVal node As TreeListNode)
        If Not visibleNode.HasAsParent(node) Then
            node.Expanded = False
        End If
    End Sub 'Execute

    Public Overrides ReadOnly Property NeedsFullIteration() As Boolean
        Get
            Return False
        End Get
    End Property
End Class

'...

TreeList1.NodesIterator.DoOperation(New CollapseExceptSpecifiedOperation(TreeList1.FocusedNode))