如何在Windows窗体TreeView中按标记选择节点

时间:2015-12-11 16:53:41

标签: c# winforms treeview

我正在尝试按标签选择节点。我已经搜索了我能做什么,但仍然没有运气。我用它来为treeview

中的每个节点分配一个标签
 foreach (DataRow dataRow in databaseFunc.dataTable.Rows)
 {
      TreeNode nodes = new TreeNode();
      nodes.Text = dataRow["LastName"].ToString().Trim() + ", " +
            dataRow["FirstName"].ToString().Trim();
      nodes.Tag = dataRow[0].ToString().Trim();
      treeView.Nodes.Add(nodes);
 }

我知道您可以使用以下方式选择节点:

 TreeNodeCollection nodeCollect = treeView.Nodes;
 treeView.SelectedNode = nodeCollect[index];

1 个答案:

答案 0 :(得分:3)

按标记查找

Tag包含复杂对象或您想基于非字符串键找到时,Tag查找非常有用。

为了能够搜索子节点,您可以查看answer here并使用Descendants扩展方法查找包括子节点在内的所有节点。然后,您可以按Tag找到该节点。例如,如果Tag包含Product并且您想根据其Id找到产品,则可以使用以下代码:

var result = tree.Descendants().Where(x=>((x.Tag as Product) != null) &&
                                     (x.Tag as Product).Id = someId).FirstOrDefault();

或者对于简单的字符串搜索键:

var result = tree.Descendants().Where(x=>(x.Tag as string) == searchkey).FirstOrDefault();
if(result!=null)
    tree.SelectedNode = result;

如果您只想在根节点之间进行搜索,请使用:

var result = tree.Nodes.Cast<TreeNode>().Where(... the rest is like above.

按名称查找

您可以使用Nodes集合Find方法根据Name(不是文本)查找节点。当您想要根据字符串键查找节点时,使用Find方法很有用。为此,您应在创建节点时设置节点的Name

var result = tree.Nodes.Find(searchKey , true).FirstOrDefault();
if(result !=null)
    tree.SelectedNode = result;

如果您只想在根节点之间进行搜索,请使用:

var result = tree.Nodes.Find(searchKey , false).FirstOrDefault();

注意

作为结论,您可以使用Tag属性在Tag中存储复杂对象,并在需要时将其解包。对于字符串搜索键,最好使用comments中所述的Name属性。