在保存数据时,为了提高查找效率,将树形结构路径完整保存下来,例如tag值为x的一级节点,下面有一个tag值为y的二级节点,该节点下tag值为z的三级节点,路径就是x/y/z。
查找该节点并设置为选中状态时,通过如下方法(递归)
/// <summary>
/// 在根据路由在树中查找某个节点
/// </summary>
/// <param name="router">路由信息,x/y/z</param>
/// <param name="tv">要查找的数</param>
/// <returns>返回被找到的节点</returns>
public static TreeNode findTreeNode(string router, TreeView tv)
{
string[] nodeTags = router.Split('/');
return findTreeNode(nodeTags, tv.Nodes,0);
}
/// <summary>
/// 通过递归的方法找到节点
/// </summary>
/// <param name="destTag">要查找的节点的路由</param>
/// <param name="tns">树形目录所有一级节点</param>
/// <param name="j">层级,第一次为0</param>
/// <returns>返回被找到的节点</returns>
public static TreeNode findTreeNode(string[] destTag, TreeNodeCollection tns,int j)
{
TreeNode tn=null;
for (int i = 0; i < tns.Count; i++ )
{
if (tns[i].Tag.ToString() == destTag[j])
{
if (tns[i].Nodes.Count > 0)
{
j++;
tns[i].Expand();
tn = findTreeNode(destTag, tns[i].Nodes, j);
}
else
{
tn = tns[i];
}
}
}
return tn;
}