我需要在treelist中实现增量搜索。判断标准是节点名称包含特定字符串。我在这里的http://community.devexpress.com/forums/t/15735.aspx中找到了“您应该覆盖XtraTreeList.Handler.TreeListHandler.IncrementalSearchState类的FindNode方法”的建议。但我不明白如何实现这一点。
发布于 2012-05-28 08:50:20
一个简单的递归应该给出一个遍历整个树的解决方案。
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");您将获得所需的节点。
发布于 2014-01-08 00:27:24
我想大概是这样的:
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);
}
}https://stackoverflow.com/questions/7648543
复制相似问题