在页面添加TreeView控件,然后用递归算法生成TreeNode

解决方案 »

  1.   

    从数据库读出数据
            /// <summary>
            /// 显示树数据
            /// </summary>
            /// <param name="dt">数据</param>
            /// <param name="mainNode">节点</param>
            private void ShowTree(DataTable dt,TreeNode mainNode)
            {
                DataRow dr;
                for (int k = 0; k < dt.Rows.Count; k++)
                {
                    dr = dt.Rows[k];
                    if (dr[2].ToString() == mainNode.Name)
                    {
                        TreeNode n = mainNode.Nodes.Add(dr[0].ToString(), dr[1].ToString(), 0, 0);
                        n.ContextMenuStrip = nodeCMS;
                        ShowTree(dt, n);
                    }
                }
     
            }
      

  2.   

    问题解决了.我这样写的.
        private void Find_Load(object sender, EventArgs e)
            {
                foreach (Feature _ft in GlobalDefine.Instance.Features)
                {
                    if (_ft.ParentId.Equals(0)) //父ID
                    {
                        TreeNode paTree = treeView1.Nodes.Add(_ft.Name);
                        childsFind(paTree, _ft.FeatureId); //子Id遍历
                    }
                }
            }        private void childsFind(TreeNode paTree, int parentId)
            {
                foreach (Feature _ft in GlobalDefine.Instance.Features)
                {
                    if (_ft.ParentId == parentId)
                    {
                        TreeNode tn = new TreeNode();
                        tn.Text = _ft.Name;
                        paTree.Nodes.Add(tn);
                        childsFind(tn, _ft.FeatureId);
                    }
                }
            }
    这样的话最起码搜索了三遍List<Features>容器里的数据.似乎不应该.我正在优化中.各位大哥对此有什么好的意见?
      

  3.   

    我初步的想法是:
    先把所要搜索的范围收缩(就是List<Feature>里的内容)
    即经过搜索判断过的数据数据都Remove掉.
    你们觉得有必要吗。?
      

  4.   

    笨点的方法,遍历来创建树节点。如果Remove掉的话,换一个节点时,再加一次吗?这样是不是做的太多了。