数据库
Id         Name01         aa
0101       aaaa
0102       bbbb
02         cc
0201       cccc
0202       dddd取出后分层绑定到树上,text值为Id+"--"+Name如:一级节点 01--aa,他的子节点0101--aaaa
用递归怎么写?

解决方案 »

  1.   

    要用treeview的递归绑定,数据库这个还缺少一个parentId的字段,不如01的 parentID为 -1,0101和0102的parentID为 01的ID,后面的以此类推。这样TreeView就能通过递归绑定了
      

  2.   

    DataSet dataSet = new DataSet();
    SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(sqlCmd);
    sqlDataAdapter.Fill(dataSet);
    DataTable dt = dataSet.Tables[0];
    SetTreeViewNode(dt, "0000", null);
    }
    }
    private void SetTreeViewNode(DataTable dt , 
    string parentID ,
    TreeNode treeNode)
    {
    DataView dv = dt.DefaultView;
    dv.Sort = "bookCatIDParent";
    DataRowView[] drvs = dv.FindRows(parentID);
    if (drvs.Length > 0)
    {
    foreach (DataRowView drv in drvs)
    {              
    String bookCatIDParent = drv["bookCatID"].ToString();
    String bookCatDesc = drv["bookCatDesc"].ToString();
    TreeNode newTreeNode = new TreeNode( bookCatDesc + 
    "[" + bookCatIDParent + "]" );
    SetTreeViewNode(dt, bookCatIDParent, newTreeNode);
    SetTreeView(treeNode, newTreeNode);
    }
    }
    }
    private void SetTreeView(TreeNode treeNode, TreeNode newTreeNode)
    {
    if (treeNode == null)
    BookViewTreeView.Nodes.Add(newTreeNode);
    else
    treeNode.ChildNodes.Add(newTreeNode);       
    }
    }
      

  3.   

    数据库结构:   
    menuID         content            parentID
      1             一级                 0 
      2             科技                 1 
      3             沈阳                 2 
      4             二级                 0 
      5             美食                 4 
      6             哈尔滨               5 
      7             三级                 0 
      8             美食                 7 
      9             大连                 8    private void LoadTree()
        {
            treeView1.Nodes.Clear();     //先清空树 
            DataTable dt = ds.Tables[0]; //把表结构从数据库查出来放到DataTable中 
            //循环绑定父节点 
            foreach (DataRow dr in dt.Rows)
            {
                //遍历加载父节点 
                if (Convert.ToInt32(dr["parentID"]) == 0)
                {
                    TreeNode newNode = new TreeNode();
                    newNode.Text = dr["content"].ToString();
                    newNode.NavigateUrl = "Switch.aspx?id=" + dr["menuID"].ToString();
                    newNode.Target = "main";
                    treeView1.Nodes.Add(newNode);                ChildLoad(dr, newNode.ChildNodes, dt);
                }
            }        this.treeView1.ExpandAll();
        }    //绑定子节点 
        private void ChildLoad(DataRow dr, TreeNodeCollection newNode, DataTable dt)
        {
            foreach (DataRow row in dt.Rows)
            {
                if (Convert.ToInt32(dr["menuID"]) == Convert.ToInt32(row["parentID"]))
                {
                    TreeNode childNode = new TreeNode();
                    childNode.Text = row["content"].ToString();
                    childNode.NavigateUrl = "Switch.aspx?id=" + row["menuID"].ToString();
                    childNode.Target = "main";
                    newNode.Add(childNode);                ChildLoad(row, childNode.ChildNodes, dt);   //递归子节点 
                }
            }
        }
      

  4.   

    要加个字段,Id就不用写成那个样子了,id的写法是有规则的,每个子节点的长度都是父节点的长度+2,而且前几位与父节点相同