在 TreeNode.Text C# 上用相似词过滤树视图
Filter Tree-View with similar word on the TreeNode.Text C#
我需要在 Winforms 上过滤树。
基本上,树视图包含注册表中的列表以及分支上的所有键
现在,当我 运行 在所有树中搜索某些值的方法时,我得到的结果只是树的一部分,我无法保存从结果到根连接的分支。
有任何方法可以保存最终结果将正确显示的层次结构。 ?
我试图将它放在包含具有级别、索引和完整路径的字符串的字典中。任何的想法?
这是搜索code.the词典,基本上是为了显示结果。用于测试
Dictionary<string, TreeNode> Result = new Dictionary<string, TreeNode>();
private void SearchforNodes(TreeNodeCollection nodes)
{
bool x = true;
while (x)
{
foreach (TreeNode item in nodes)
{
x = ReadAllKeys(item);
}
}
}
bool flag = true;
private bool ReadAllKeys(TreeNode node)
{
foreach (TreeNode item in node.Nodes)
{
if (item.Nodes.Count > 0)
{
ReadAllKeys(item);
}
else
{
var result = SearchKey(item);
if (result != null)
{
if (!Result.Keys.Contains(string.Format("Index: {0} level: {1} Text: {2} FullPathTree: {3} ", result.Index, result.Level, result.Text, result.FullPath)))
{
Result.Add(string.Format("Index: {0} level: {1} Text: {2} FullPathTree: {3} ", result.Index, result.Level, result.Text, result.FullPath), result);
flag = false;
}
else
{
flag = false;
}
}
}
}
return flag;
}
private TreeNode SearchKey(TreeNode node)
{
if (node.Text.ToUpper().Contains(txtSearch.Text.ToUpper()))
{
return node;
}
else
{
return null;
}
}
我记得在使用 Treeviews 时,在 class/classes 中用于包含用于树的数据,我们通常添加一个 Parent 或 ParentID 字段,以便每个节点,直到叶子知道它是谁 parent。
这对于设置叶子以外的哪些节点必须可见很有用。
我们的数据 class 通常在数据表或集合中,但也总是放在树节点的标签元素中,以便能够访问节点的所有信息。 (标签是一个 object,因此您可以附加 classes 或数据行,然后使用强制转换检索它们)
如果您只是使用树中的标准节点元素作为数据源,我确定该节点具有 Parent 信息,以便您可以将您想要的可见元素添加到集合中过滤到根的所有元素后显示。
我发现在处理树数据时有用的另一件事是拥有所有节点的简单集合,例如在构建树时更新的列表,并使用该集合来设置节点及其 parents,祖先等等。
我不确定这是否正是您所需要的,但我希望它能让您走上正确的道路。
我需要在 Winforms 上过滤树。 基本上,树视图包含注册表中的列表以及分支上的所有键
现在,当我 运行 在所有树中搜索某些值的方法时,我得到的结果只是树的一部分,我无法保存从结果到根连接的分支。 有任何方法可以保存最终结果将正确显示的层次结构。 ?
我试图将它放在包含具有级别、索引和完整路径的字符串的字典中。任何的想法?
这是搜索code.the词典,基本上是为了显示结果。用于测试
Dictionary<string, TreeNode> Result = new Dictionary<string, TreeNode>();
private void SearchforNodes(TreeNodeCollection nodes)
{
bool x = true;
while (x)
{
foreach (TreeNode item in nodes)
{
x = ReadAllKeys(item);
}
}
}
bool flag = true;
private bool ReadAllKeys(TreeNode node)
{
foreach (TreeNode item in node.Nodes)
{
if (item.Nodes.Count > 0)
{
ReadAllKeys(item);
}
else
{
var result = SearchKey(item);
if (result != null)
{
if (!Result.Keys.Contains(string.Format("Index: {0} level: {1} Text: {2} FullPathTree: {3} ", result.Index, result.Level, result.Text, result.FullPath)))
{
Result.Add(string.Format("Index: {0} level: {1} Text: {2} FullPathTree: {3} ", result.Index, result.Level, result.Text, result.FullPath), result);
flag = false;
}
else
{
flag = false;
}
}
}
}
return flag;
}
private TreeNode SearchKey(TreeNode node)
{
if (node.Text.ToUpper().Contains(txtSearch.Text.ToUpper()))
{
return node;
}
else
{
return null;
}
}
我记得在使用 Treeviews 时,在 class/classes 中用于包含用于树的数据,我们通常添加一个 Parent 或 ParentID 字段,以便每个节点,直到叶子知道它是谁 parent。 这对于设置叶子以外的哪些节点必须可见很有用。 我们的数据 class 通常在数据表或集合中,但也总是放在树节点的标签元素中,以便能够访问节点的所有信息。 (标签是一个 object,因此您可以附加 classes 或数据行,然后使用强制转换检索它们)
如果您只是使用树中的标准节点元素作为数据源,我确定该节点具有 Parent 信息,以便您可以将您想要的可见元素添加到集合中过滤到根的所有元素后显示。
我发现在处理树数据时有用的另一件事是拥有所有节点的简单集合,例如在构建树时更新的列表,并使用该集合来设置节点及其 parents,祖先等等。
我不确定这是否正是您所需要的,但我希望它能让您走上正确的道路。