1 0 aaaaaa1
2 0 bbbbbb2
3 0 cccccc3
4 3 dddddd4
5 4 asd5
6 4 asdas6
7 5 adsad7
8 6 adsad8
9 8 adsdasd9
10 9 asdad10
11 6 adsadsd11
12 4 asdadasd12
谁可以通过上面的数据来实现一个TreeView
我真的对自己无言想n种方法都是提示一个错
网上找的也一样
(未处理的“System.StackOverflowException”类型的异常出现在 System.Data.dll 中。)
确保你没有无限循环和无限递归

解决方案 »

  1.   

    private void CreateTreeView(TreeNodeCollection nodes, int parentId)
        {        
            List<SysFun> list = SysFunManager.GetSysFunByParentNodeId(parentId);
            TreeNode node;
            foreach (SysFun sys in list)
            {
                node = new TreeNode();
                node.Text = sys.displayName;
                node.Value = sys.nodeId.ToString();
                nodes.Add(node);
                CreateTreeView(node.ChildNodes, sys.nodeId);
            }
        }this.CreateTreeView(this.treeMenu.Nodes, 0);你数据库的第二列是父节点的吧
     在这程序里就是parentId
    treeMenu 就是你拖上的一个treeview控件
      

  2.   

    同意 我也觉得根据一楼说的做吧!
    把文件生成一个XML文件。
      

  3.   

    这个要实现倒是不难,第一列是节点编号。第二列是该节点的母节点编号。第三列是一个混合编码的:字母部分可以用作节点的名称,后面带上节点编号。生成的方式来说,主要是前面两列生成,算法上并无太大难度。我的步骤来说用以下功能:
    1:将该文本序列格式化为一个集合,设为List<elemnt> es。集合中的元素为以下类型:
    public class element
    {
    public int Id{get;set;}
    public int ParentId{get;set;}
    public int Text{get;set;}
    }
    分别对应上述3列。
    3:采用递归或其它方法向TreeView中添加节点。
    大体类似于:
    public void addChildren(TreeNode tn,int parentId)
    {
        var k = from e in es where e.ParentId =parentId;
        foreach(var t in k)
        {
              var newNode = new TreeNode(t.Text);
              tn.AddChild(newNode);
              addChildren(t.Id);             //这里递归
        }
    }大体上是这样的,未经编译测试。
    另外使用到了2008的LINQ功能,所以在2005下需要作适当修改。
      

  4.   

    这个写成XML也没什么规律啊!~可以么
    4楼说的应该可以吧
    我也试试