我的树视图由文件夹和文件填充。我使用下面的代码来过滤树视图,但它不返回匹配字符串的所有文件,只返回一个文件。 例如字母“f”有3个文件,但是当我搜索它时只返回1个文件。
private TreeNode FindNodeByValue(TreeNodeCollection nodes, string searchstring)
{
// Loop through the tree node collection
foreach (TreeNode node in nodes)
{
// Does the value match the search string?
if (node.Value.ToUpper().Contains (searchstring.ToUpper()))
// Yes it does match - return it
return node;
else
{
// No it does not match - search any child nodes of this node
TreeNode childNode = SearchChildNodes(node, searchstring);
// If the childNode is not null it was a match
if (childNode != null)
// Return the matching node
return childNode;
}
}
// If the matching node is not found return null
return null;
}
/// <summary>
/// This method searches a node's ChildNodes collection to find a matching value
/// with the incoming search string
/// It will iteratively call itself as it drills into each nodes child nodes (if present)
/// </summary>
/// <param name="parentNode">Parent node to search for a match</param>
/// <param name="searchstring">string to be matched with the Nodes Value property</param>
/// <returns>Treenode of the matching node if found. If not found it will be null</returns>
private TreeNode SearchChildNodes(TreeNode parentNode, string searchstring)
{
// Loop through the child nodes of the parentNode passed in
foreach (TreeNode node in parentNode.ChildNodes)
{
// Does the value match the search string?
if (node.Value.ToUpper().Contains(searchstring.ToUpper()))
// Yes it does match - return it
return node;
else
{
// No it does not match - recursively search any child nodes of this node
TreeNode childNode = SearchChildNodes(node, searchstring);
// If the childNode is not null it was a match
if (childNode != null)
// Return the matching node
return childNode;
}
}
// If the matching node is not found OR if there were no child nodes then return null
return null;
}
protected void Button1_Click(object sender, EventArgs e)
{
TreeNode trnode=FindNodeByValue(TreeView1.Nodes, fieldFilterTxtBx.Text);
if (trnode != null)
{
TreeView1.Nodes.Clear();
// TreeNode newnode = new TreeNode("Detail Engineering");
// TreeView1.Nodes.Add(newnode);
TreeView1.Nodes.Add(trnode);
TreeView1.ExpandAll();
}
else
{
Label1.Text = "No file found";
}
答案 0 :(得分:0)
它只返回一个值,因为如果没有找到文件,函数只会递归调用自身。您还需要将递归添加到SearchChildNodes中if语句的此分支:
if (node.Value.ToUpper().Contains(searchstring.ToUpper()))
// Yes it does match - return it
return node;
else
您还可能需要将文件名添加到数组或Generic.List中,以便一次存储多个文件名。