我设计了一个表结构如下:节点名称,节点编号,节点级次,父节点
menu1     01        0         
menu2     02        1         01
menu3     03        1         01
menu4     04        2         03
如何能从数据库里面读出这些信息,然后动态的生成一个TreeNode,大家给点思路!

解决方案 »

  1.   

    #region 循环DataSet绑定TreeView
    private void Bind_SellReport(DataSet ds,TreeView tv,int ParentID,TreeNode pNode)
    {
    DataView dvTree = new DataView(ds.Tables[0]);
    //过滤ParentID,得到当前的所有子节点
    dvTree.RowFilter =  "HiDepID = " + ParentID; foreach(DataRowView Row in dvTree) 
    {
    TreeNode Node=new TreeNode() ;
    if(pNode == null) 
    {    //添加根节点
    Node.Text = Row["MainString"].ToString();
    tv.Nodes.Add(Node);
    Node.Expand();
    Bind_SellReport(ds,tv,Int32.Parse(Row["DepID"].ToString()), Node);    //再次递归

    else 
    {   //添加当前节点的子节点
    Node.Text = Row["MainString"].ToString();
    pNode.Nodes.Add(Node);
    Bind_SellReport(ds,tv,Int32.Parse(Row["DepID"].ToString()),Node);     //再次递归
    }
    }  
    }
    #endregion
      

  2.   

    利用递归:
    private void CreateTree(TreeNodeCollection folderTreeNodeCollection ,int parentID)
    {    
                  SqlConnection myConnection = new  SqlConnection(ConfigurationSettings.AppSettings["myweb"]);
          SqlDataAdapter myCommand = new  SqlDataAdapter("select * from bbs_config",myConnection);
          DataSet ds=new DataSet();
          myCommand.Fill(ds,"bbs_config");        
                  DataView dv=new DataView(ds.Tables["bbs_config"]);
                  dv.RowFilter= "flag="+parentID;
                  int tmpParentFolderID=0;
                             
                  foreach(DataRowView drv in  dv)
                  {
       TreeNode tn=new TreeNode();
                       tn.ID=drv.Row["id"].ToString();
                       tn.Text=drv.Row["bbsname"].ToString().Trim();
                       tn.NavigateUrl="club.aspx?bbsname1="+tn.Text;
                       tmpParentFolderID=Int32.Parse(drv.Row["flag"].ToString().Trim());                   
                       folderTreeNodeCollection.Add(tn);                   
                       CreateTree(folderTreeNodeCollection[folderTreeNodeCollection.Count - 1].Nodes,Int32.Parse(tn.ID));
                   }
     }
      

  3.   

    楼上的代码验证过么!?tn.ID,tn.NavigateUrl是什么东西!
      

  4.   

    /// <param name="selectedIndex"></param>
    private void rebuildTree( string selectedIndex )
    {
    // Initial Tree
    TreeOperationDB treeOperation = new TreeOperationDB();
    treeOperation.SetTreeView(tvDocDir); TreeOperationDB.ExpandTreeNode(selectedIndex,this.tvDocDir.Nodes[0]);
    tvDocDir.SelectedNodeIndex = selectedIndex; // Set Initial
    this.SetPageView(MainPageStatus.ViewStatusInit);
    } /// </summary>
    /// <param name="NodePath"></param>
    /// <param name="node"></param>
    public static void  ExpandTreeNode(string NodePath,TreeNode node)
    {
    string [] NodeIndex = NodePath.Split('.'); for(int i = 1;i < NodeIndex.Length ; i ++)
    {
    int Index = int.Parse( NodeIndex[i] ); node = node.Nodes[Index];

    if( i == NodeIndex.Length -1 )
    {
    node.Expanded = false ;
    }
    else
    {
    node.Expanded = true ;
    }
    }
    }
      

  5.   

    你可以把数据取到一个table 中,然后写一个递归方法,就可以实现了啊
    在方法中利用table.find("父节点=参数值")找到子节点
      

  6.   

    暈死~~
    你們有沒有問樓主說的是WinForm還是Web啊?
    WinForm下:
    TreeView tvw;
    SqlDataReader rd=SqlCommand.ExecuteReader("SELECT 节点编号,节点名称... Order By 节点级次,节点编号");
    While(rd.read())
    {
        TreeNode nd;
        if(rd["节点级次"].tostring()=="")
        {
            nd=new TreeNode(rd[1].tostring());
            nd.tag=rd[1];
            tvw.Nodes.Add(nd);
         }
         else
         {
             TreeNode pnd;
             for(int i=0;i<tvw.Nodes.Count;i++)
             {
                pnd=getParentNode(tvw.Nodes[i],rd["父节点"].tostring())
                if(pnd!=null) break;
             }
             if(pnd!=null)
             {
                nd=new TreeNode(rd[1].tostring());
                nd.tag=rd[1];
                pnd.Nodes.Add(nd);
             }
         }
    }private TreeNode getParentNode(TreeNode pnd,string id)
    {
        TreeNode nd=null;
        if(pnd.tag.tostring()==id)
        {
           return pnd;
        }
        if(pnd.Nodes.Count>0)
        {
           for(int i=0;i<pnd.Nodes.Count;i++)
              nd=getParentNode(pnd.Nodes[i],id)
        }
        return nd;
    }Web:
    沒做過;沒有IDE,可能錯誤多多﹐不過思路大概如此.