下面的示例展示了如何创建一个操作类,折叠子节点中不包含指定节点的所有节点。 结果只有该节点的父节点被展开。
这个操作类接受节点作为它的构造函数的参数,并把节点存储到一个内部字段中。 Execute 方法检查被处理的节点是否包含指定的节点作为子节点。 如果不包含,则折叠被处理的节点。 在操作类中也重写了 TreeListOperation.NeedsFullIteration 属性,仅处理有子节点的节点。 当使用大型而复杂的节点结构时,这样处理能提升性能。
下面的插图展示了在执行示例代码之前和之后的树状列表:
C# | ![]() |
---|---|
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 Basic | ![]() |
---|---|
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)) |