nch*_*che 11 c# treeview filter winforms
我在C#winform中有一个TreeView.我希望能够通过搜索框添加搜索功能.基本上当用户输入字母时(我猜_TextChanged事件),我只显示包含带有输入字母的子节点的节点...
我的TreeView包含53个父节点,总共超过15000个节点,因此我需要一些高性能的东西.我从一个csv构建我的TreeView,我将其加载到DataTable中,然后进行查询以获取具有关联子节点的Parent节点...
UPDATE
我有个主意.最终目标是当用户双击子节点时,它会被添加到listView中.
我首先在一个简单的列表视图中实现了这个搜索功能,我没有将我的数据分成几类.
我的想法是,一旦用户开始输入内容,我就会关闭我的树视图并显示列表视图......
我会尝试并实施,看看它给出了明智的表现......任何关于这个想法的评论家都是受欢迎的.
最后这就是我所做的,它符合我的要求.我首先制作TreeView的副本并存储到fieldsTreeCache中.然后我清除了字段树.然后,我搜索缓存并将包含我的搜索参数的任何节点添加到fieldsTree.请注意,一旦搜索,您将不再拥有显示的父节点.你只需要获得所有的终端节点.我这样做是因为如果没有,我有两个选择:
不扩展父节点,但是您只需获取类别而不是您要搜索的子节点.
void fieldFilterTxtBx_TextChanged(object sender, EventArgs e)
{
//blocks repainting tree till all objects loaded
this.fieldsTree.BeginUpdate();
this.fieldsTree.Nodes.Clear();
if (this.fieldFilterTxtBx.Text != string.Empty)
{
foreach (TreeNode _parentNode in _fieldsTreeCache.Nodes)
{
foreach (TreeNode _childNode in _parentNode.Nodes)
{
if (_childNode.Text.StartsWith(this.fieldFilterTxtBx.Text))
{
this.fieldsTree.Nodes.Add((TreeNode)_childNode.Clone());
}
}
}
}
else
{
foreach (TreeNode _node in this._fieldsTreeCache.Nodes)
{
fieldsTree.Nodes.Add((TreeNode)_node.Clone());
}
}
//enables redrawing tree after all objects have been added
this.fieldsTree.EndUpdate();
}
Run Code Online (Sandbox Code Playgroud) 归档时间: |
|
查看次数: |
19220 次 |
最近记录: |