如何在Windows窗体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];
按标签查找
当Tag
包含复杂对象或您希望基于非字符串键查找时,通过Tag
查找非常有用。
为了能够搜索子节点,您可以在此处查看答案并使用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().Where(... the rest is like above.
按名称查找
您可以使用Find
方法的Nodes
集合来查找基于其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
中存储复杂对象,并在需要时将其解包。 对于字符串搜索键,最好使用注释中所述的Name
属性。