DevExpress TreeList добавочный поиск - PullRequest
0 голосов
/ 04 октября 2011

Мне нужно реализовать пошаговый поиск в древовидном списке.Критерий: имя узла содержит конкретную строку.Я нашел этот совет «Вы должны переопределить метод FindNode класса XtraTreeList.Handler.TreeListHandler.IncrementalSearchState» отсюда http://community.devexpress.com/forums/t/15735.aspx. Но я не понимаю, как это реализовать.

Ответы [ 2 ]

2 голосов
/ 28 мая 2012

Простая рекурсия должна дать решение для обхода всего дерева.

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");

, вы получите нужный вам узел.

0 голосов
/ 07 января 2014

Я думаю, что-то вроде:

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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...