【问题标题】:DevExpress TreeList incremental searchDevExpress TreeList 增量搜索
【发布时间】:2011-10-04 13:20:06
【问题描述】:

我需要在树列表中实现增量搜索。标准是节点的名称包含特定的字符串。我发现这个建议“你应该重写的 FindNode 方法 XtraTreeList.Handler.TreeListHandler.IncrementalSearchState 类”来自这里http://community.devexpress.com/forums/t/15735.aspx。但我不明白如何实现这一点。

【问题讨论】:

  • 使用depth-first或广度优先搜索算法遍历树节点,并根据您的条件匹配节点名称。

标签: c# devexpress


【解决方案1】:

一个简单的递归应该给出遍历整个树的解决方案。

private TreeListNode GetNodeByName(TreeListNodes prmNodes, String prmName)
{
   foreach (TreeListNode node in prmNodes)
   {
      // Assume the data is present in column 0.
      if (node[0].ToString().Contains(prmName, StringComparison.CurrentCultureIgnoreCase))
         return node;

      TreeListNode foundNode = GetNodeByName(node.Nodes, prmName);

      if (foundNode != null)
         return foundNode;
   }
   return null;
}
//---------------------------------------------------------------------------

现在如果你做一个简单的调用,比如:

TreeListNode node = GetNodeByName (treeList.Nodes, "MyNodeName");

你会得到你想要的节点。

【讨论】:

    【解决方案2】:

    我认为是这样的:

    public class MyTreeList : DevExpress.XtraTreeList.TreeList
    {
    
        protected override DevExpress.XtraTreeList.Handler.TreeListHandler CreateHandler()
        {
            return new MyHandler(this);
        }
    
        internal DevExpress.XtraTreeList.Handler.TreeListHandler GetHandler() { return this.Handler; }
    }
    
    public class MyHandler : DevExpress.XtraTreeList.Handler.TreeListHandler
    {
        public MyHandler(TreeList tree) : base(tree) { }
    
        protected override TreeListControlState CreateState(TreeListState state)
        {
            if (state == TreeListState.IncrementalSearch && this.TreeList is MyTreeList)
                return new MyFinder((this.TreeList as MyTreeList).GetHandler());
            return base.CreateState(state);
        }
    }
    
    public class MyFinder : DevExpress.XtraTreeList.Handler.TreeListHandler.IncrementalSearchState
    {
        public MyFinder(DevExpress.XtraTreeList.Handler.TreeListHandler handler) : base(handler) { }
        protected override TreeListNode FindNode(FindNodeArgs e)
        {
            ////////////////////////////////////
            ////////////////////////////////////
            ////////////////////////////////////
            return base.FindNode(e);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-10
      • 1970-01-01
      • 1970-01-01
      • 2014-10-27
      • 2023-03-09
      • 1970-01-01
      • 2015-02-05
      • 1970-01-01
      相关资源
      最近更新 更多