数据库表(nodetable)
id   nodeid   nodename  pid
1    1        工业品    0
2    2        消费品    0
3    11       机械      1
4    12       行业设备  1
用TreeView怎么绑定。
从网上找的代码不好用,没调试成功,现在求源码。(最好用递归)我现在能把nodetable中的数据,读到datatable中了,现在就是不知道怎么把DataTable绑定到树控件。求助。

解决方案 »

  1.   

    参考源码如下:  DataSet odr = Sys.BLL.Common.GetMultiTableList("dt_Getmunelist " + parentID + ",'" + loginuserid + " '");
                for (int i = 0; i < odr.Tables[0].Rows.Count; i++)
                {
                    MenuItem menuNode = new MenuItem();
                    menuNode.Text = odr.Tables[0].Rows[i]["munelistname"].ToString();
                    menuNode.Value = odr.Tables[0].Rows[i]["id"].ToString();
                    menuNode.Enabled = true;
                    menuNode.Target = "_self";
                    menuNode.NavigateUrl = odr.Tables[0].Rows[i]["munelisturl"].ToString();
                    
                    Menu1.Items.Add(menuNode);
                    parentID = Convert.ToInt16(odr.Tables[0].Rows[i]["id"].ToString());
                    addchildmenu1(menuNode, menuNode.Value);
               }protected void addchildmenu1(MenuItem pnode, string pid)
        {
            DataSet odr1 = Sys.BLL.Common.GetMultiTableList("dt_Getmunelist " + parentID + ",'" + loginuserid + " '");
           //DataSet odr1 = Sys.BLL.Common.GetMultiTableList("select ml.id,  ul.userid,Ml.munelistname,ml.munelisturl,Ml.parentID,Ml.munelsitid from  mulisttable Ml,usgroup Ug ,grmunelist gm,Uslogininfo Ul where ul.userid=ug.userid and ug.usergroup= gm.usergroupid and gm.munelistid=ml.id and ul.userid='admin'  and parentID=" + parentID + " order by ml.orderid");
            for (int i = 0; i < odr1.Tables[0].Rows.Count; i++)
            {
                MenuItem menuNode = new MenuItem();
                menuNode.Text = odr1.Tables[0].Rows[i]["munelistname"].ToString();
                menuNode.Value = odr1.Tables[0].Rows[i]["id"].ToString();
                menuNode.Enabled = true;
                menuNode.Target = "_self";
                menuNode.NavigateUrl = odr1.Tables[0].Rows[i]["munelisturl"].ToString();
                //Menu1.Items.Add(menuNode);
                pnode.ChildItems.Add(menuNode);
                parentID = Convert.ToInt16(odr1.Tables[0].Rows[i]["id"].ToString());
                addchildmenu2(menuNode, menuNode.Value);
            }
        }protected void addchildmenu2(MenuItem pnode, string pid)
        {        DataSet odr2 = Sys.BLL.Common.GetMultiTableList("dt_Getmunelist " + parentID + ",'" + loginuserid + " '");
          //  DataSet odr2 = Sys.BLL.Common.GetMultiTableList("select ml.id,  ul.userid,Ml.munelistname,ml.munelisturl,Ml.parentID,Ml.munelsitid from  mulisttable Ml,usgroup Ug ,grmunelist gm,Uslogininfo Ul where ul.userid=ug.userid and ug.usergroup= gm.usergroupid and gm.munelistid=ml.id and ul.userid='admin'  and parentID=" + parentID + " order by ml.orderid");
            for (int i = 0; i < odr2.Tables[0].Rows.Count; i++)
            {
                MenuItem menuNode = new MenuItem();
                menuNode.Text = odr2.Tables[0].Rows[i]["munelistname"].ToString();
                menuNode.Value = odr2.Tables[0].Rows[i]["id"].ToString();
                menuNode.Enabled = true;
                menuNode.Target = "_self";
                menuNode.NavigateUrl = odr2.Tables[0].Rows[i]["munelisturl"].ToString();
                //Menu1.Items.Add(menuNode);
                pnode.ChildItems.Add(menuNode);
                parentID = Convert.ToInt16(odr2.Tables[0].Rows[i]["id"].ToString());
                addchildmenu1(menuNode, menuNode.Value);
            }
        }接分 
      

  2.   


    private void button1_Click(object sender, EventArgs e)
    {
        DataTable dt = new DataTable();
        dt.Columns.Add("id");
        dt.Columns.Add("nodename");
        dt.Columns.Add("pid");
        dt.Rows.Add("1", "工业品", "0");
        dt.Rows.Add("2", "消费品", "0");
        dt.Rows.Add("3", "机械", "1");
        dt.Rows.Add("4", "行业设备", "1");
        // 以上部分 直接从数据库中select 然后 Fill 到 DataTable。    nodes(this.treeView1.Nodes, dt, 0);
    }private void nodes(TreeNodeCollection tnode, DataTable dt, int id)
    {    DataView dview = new DataView(dt);       //创建视图 ,因为只有一张表
        dview.RowFilter = "[pid]=" + id + "";    //视图的好处,在于能方便筛选数据
        foreach (DataRowView row in dview)       //显示每个节点的标题,递归!
        {
            TreeNode node = new TreeNode();
            node.Text = row["nodename"].ToString();
            tnode.Add(node);
            nodes(node.Nodes, dt, Int32.Parse(row["id"].ToString()));
        }
    }
      

  3.   

    private void InitTree(TreeNodeCollection Nds,string parentId)
    {
    DataView dv=new DataView();
    TreeNode tmpNd;
    string intId;
    dv.Table=ds.Tables["tree"];
    dv.RowFilter="pid='" + parentId + "'" ;
    foreach(DataRowView drv in dv)
    {
    tmpNd=new TreeNode();
    tmpNd.Tag=drv["NodeId"].ToString();
    tmpNd.Text=drv["NodeName"].ToString();
    Nds.Add(tmpNd);
    intId=drv["pid"].ToString();
    InitTree(tmpNd.Nodes,tmpNd.Tag.ToString());
    }