有一种数据结构
1
1-1
1-1-1
1-2
1-2-1
1-2-2
1-2-3
1-3
2
2-1
2-2
2-3
2-3-1可能有的数据如1-4-12-3-2-32-2到无穷
当然都是从大到小排列的
我们需要动态的地把它们加载到一个TreeView树形控件中,谈谈各自想法?
高分送上,不够再加

解决方案 »

  1.   

    http://blog.csdn.net/lylymb/archive/2009/07/07/4329597.aspx
      

  2.   

    net3.0 linq+扩展方法 以web treeview为例public static class treenodeEx
    {
        public static IEnumerable<TreeNode> myconvert(this TreeNodeCollection tds)
        {
            
            foreach (TreeNode td in tds)               
                    yield return td;
           
            foreach (TreeNode x in tds)
                foreach (var r in myconvert(x.ChildNodes))
                    yield return r;
            
        }    public static void myAdd(this TreeNodeCollection tds,string path)
        {
            var temp = path.Split('-');
            TreeNode td = new TreeNode();
           int deep = 0;
            foreach (var item in temp)
            {
                string tempPath = string.Join("/", temp, 0, deep + 1);            var p = tds.myconvert().FirstOrDefault(c => c.ValuePath == tempPath);
                if (p==null)
                {
                    p = new TreeNode();
                    p.Value = item;
                    p.Text = item;
                    if (String.IsNullOrEmpty(td.Value))
                    {
                     td=p;
                        tds.Add(td);
                       
                    }
                    else
                        {
                         td.ChildNodes.Add(p);
                        }
                }
                else
                    {
                     td=p;
                    }
                deep++;
                
            }
        
        }
    }调用方式:
     this.TreeView1.Nodes.Clear();
            this.TreeView1.Nodes.myAdd("1");
            this.TreeView1.Nodes.myAdd("1-1");
            this.TreeView1.Nodes.myAdd("1-1-1");
            this.TreeView1.Nodes.myAdd("1-2");
            this.TreeView1.Nodes.myAdd("1-2-1");
            this.TreeView1.Nodes.myAdd("1-2-2");
            this.TreeView1.Nodes.myAdd("1-3");
            this.TreeView1.Nodes.myAdd("2");
            this.TreeView1.Nodes.myAdd("2-1");
            this.TreeView1.Nodes.myAdd("2-1-1");实际上使用linq还有更简单的方式,不过我的linq学的不好,就只能这么将就了,嘿嘿,没有专门去学linq的特殊构造和扩展,只是用比较常见的查询完成