怎样在一个TreeView中找到一个Tag为特定值的Node,并把它设置为选中状态?

解决方案 »

  1.   

    可以递归遍历所有NODES
    判断节点的TAG是否相等  如果相等,那就把这个NODE的selected 设置为true
      

  2.   

    你可以按深度优先(算法:查一个儿子后再查儿子的儿子,如此递归,直到查到最后,没找到就从第二个儿子再如此查下去)或广度优先(算法:查所有的儿子,如果没有查到,则再查所有的孙子,如此递归)查找指定的节点下面给出按深度优先具体实现算法/// <summary>
    /// 按深度优先查找指定的节点,找到即退出,即只找最先找到的一个节点。
    /// </summary>
    /// <param name="p_treeNodes">节点集</param>
    /// <param name="p_string">比较的字符</param>
    /// <param name="p_byValueOrText">true按节点值比较,否则按节点的Text比较</param>
    /// <Info>
    /// <作者>周方勇(长江支流)</作者>
    /// <blog>http://blog.csdn.net/flygoldfish</blog>
    /// </Info>
    /// <returns>返回最先找到的一个节点</returns>
    public TreeNode FindTreeNodeByDepth(TreeNodeCollection p_treeNodes,string p_string,bool p_byValueOrText)
    {
    TreeNode treeNodeReturn = null; #region 实现,按深度优先查找,找到即退出... string strKeyText = "";
    string strValueText = ""; foreach(TreeNode node in p_treeNodes)
    {
    //取当前节点键值
    GetTreeNodeValueText(node,ref strKeyText,ref strValueText); //根据键比
    if (p_byValueOrText)
    {
    if (strKeyText == p_string)
    {
    treeNodeReturn = node;
    }
    }
    else
    {
    //否则根据值比
    if (strValueText == p_string)
    {
    treeNodeReturn = node;
    }
    } //找到即退出
    if ( treeNodeReturn != null )
    {
    break;
    }
    else
    {
    //深度优先查询
    if (node.Nodes.Count > 0)
    {
    treeNodeReturn = FindTreeNodeByDepth(node.Nodes,p_string,p_byValueOrText);
    }
    } } #endregion return treeNodeReturn;
    }
    这里用到一个统一取节点键值的方法 public void GetTreeNodeValueText(TreeNode p_treeNode,ref string p_value,ref string p_text)
    {
    //取键值
    p_value = p_treeNode.Tag.ToString();
    p_text = p_treeNode.Text;
    }
      

  3.   

    大家好,这段时间真的太忙了,一直封闭加班开发,刚解放。以后准备在我的blog
    http://blog.csdn.net/flygoldfish
    继打印之后,写tree一系列的分级加载、查找定位等算法,欢迎大家一起交流!
    还准备把MIS快速开发的源码在我的网上www.webmis.com.cn发布调用如下:TreeView tree = 你的树;
    TreeNode node = FindTreeNodeByDepth(tree.Nodes,"123",true);
    if (node != null)
    {
    tree.SelectedNode = node; //高亮显示节点
    node.Checked = true; //如果节点前有复选框,可以如此
    }
      

  4.   

    我的tree都是跟dataSet填充生成的可以查询DataSet然后再生成Tree