如何在 Windows Forms TreeView 中通过标记 select 节点
How to select a Node by Tag in Windows Forms TreeView
我正在尝试 select 通过标签的节点。我已经尽我所能,但仍然没有运气。我用它为 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);
}
我知道你可以select一个节点使用:
TreeNodeCollection nodeCollect = treeView.Nodes;
treeView.SelectedNode = nodeCollect[index];
按标签查找
当 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.
按名称查找
您可以使用 Find
method of Nodes
collection to find a node based on its 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
属性,如 .
中所述
我正在尝试 select 通过标签的节点。我已经尽我所能,但仍然没有运气。我用它为 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);
}
我知道你可以select一个节点使用:
TreeNodeCollection nodeCollect = treeView.Nodes;
treeView.SelectedNode = nodeCollect[index];
按标签查找
当 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.
按名称查找
您可以使用 Find
method of Nodes
collection to find a node based on its 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
属性,如