treeview的绑定通常是用递归的;
而且在表结构里对每条记录标记父节点,和子节点的关系,
就可以进行tree的N层绑定了

解决方案 »

  1.   

    给你个思路:
    GetBigType() 取到数据后循环,循环体里的处理就是
    把改条纪录添加到treeview上,针对每一条纪录再取二级 GetMidType()的数据,然后再小循环,再取GetSmallType()的数据
    如果还有4级,5级的话,你就要考虑递归了。
    还是做不出来可以联系我。[email protected]
      

  2.   

    给你个例子吧:一看就明白了
    private void CreateDataSource(string Parentid)
    {
    string sqlstr ="  select distinct m.id, m.ModuleID,m.modulename,m.menupath,m.parentmoduleid ";
    sqlstr +=" from  models m, accounts_userroles ur,account_rolepermission rm ";
    sqlstr +=" where      m.showmenu=1 ";
    sqlstr +=" and  m.moduleid=rm.moduleid ";
    sqlstr +=" and  rm.roleid=ur.roleid ";
    sqlstr +=" and  ur.userid="+this.User.Identity.Name;
    sqlstr +=" and  parentmoduleid='"+Parentid+"'";
    sqlstr +="  order by m.ID ";
    DataSet ds=new DataSet ();
    ds=Dbc.getBinding (sqlstr,"s");
    foreach (DataRow dr in ds.Tables[0].Rows )
    {
    TreeNode node=new TreeNode ();
    node.Text =dr["modulename"].ToString ();
    node.ID =dr["moduleid"].ToString ();
    node.ImageUrl="../images/sciencesearch.gif";
    if (dr["menupath"].ToString () !="")
    {
    node.NavigateUrl=dr["menupath"].ToString ();
    node.Target ="MainFrame";
    }
    CreateDataSource(dr["moduleid"].ToString (),ref node);
    Tv_menu.Nodes .Add(node);
    } }
    private void CreateDataSource (string Parentid, ref TreeNode Pnode)
    {
    string sqlstr ="   select distinct m.id, m.ModuleID,m.modulename,m.menupath,m.parentmoduleid ";
    sqlstr +=" from  models m, accounts_userroles ur,account_rolepermission rm ";
    sqlstr +=" where      m.showmenu=1 ";
    sqlstr +=" and  m.moduleid=rm.moduleid ";
    sqlstr +=" and  rm.roleid=ur.roleid ";
    sqlstr +=" and  ur.userid="+this.User.Identity.Name;
    sqlstr +=" and parentmoduleid='"+Parentid+"'";
    sqlstr +=" order by m.ID";
    DataSet ds=new DataSet ();
    ds=Dbc.getBinding (sqlstr,"s");
    foreach (DataRow dr in ds.Tables[0].Rows )
    {
    TreeNode node=new TreeNode ();
    node.Text =dr["modulename"].ToString ();
    node.ID =dr["moduleid"].ToString ();
    if (dr["menupath"].ToString () !="")
    {
    node.NavigateUrl=dr["menupath"].ToString ();
    node.Target ="MainFrame";
    }
    CreateDataSource(dr["moduleid"].ToString (),ref node);
    Pnode.Nodes .Add(node);
    }
    }
      

  3.   

    搂主要厚道!http://community.csdn.net/Expert/topic/5770/5770820.xml?temp=.5174829
      

  4.   

    我仿照给你做了个例子,你可以参考
    using System;
    using System.Data;
    using System.Configuration;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;public partial class _Default : System.Web.UI.Page 
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            InitTreeView();
        }    private void InitTreeView()
        {
            DataTable dt = GetBigType();
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                
                TreeNode node = new TreeNode();
                node.Expanded = false;//设置节点是否展开,取反
                //look this code run 
                node.Text = dt.Rows[i]["bigname"].ToString();
                node.Value = dt.Rows[i]["TradeBigTypeid"].ToString();
                this.MyTreeView.Nodes.Add(node);
               DataTable minDt=GetMidType(node.Value);           for (int j = 0; j < minDt.Rows.Count ; j++)
               {
                   TreeNode minNode = new TreeNode();
                   minNode.Text = minDt.Rows[j]["minname"].ToString();
                   minNode.Value = minDt.Rows[j]["MinTypeid"].ToString();
                   node.ChildNodes.Add(minNode);               DataTable smallDt = GetSmallType(node.Value, minNode.Value);               for (int k = 0; k < smallDt.Rows.Count ; k++)
                   {
                       TreeNode samllNode = new TreeNode();
                       samllNode.Text = smallDt.Rows[k]["smallname"].ToString();
                       samllNode.Value = smallDt.Rows[k]["SmallTypeid"].ToString();
                       minNode.ChildNodes.Add(samllNode);
                   }           }        }
        }
        public static DataTable GetBigType()
        {
            DataTable dTable = new DataTable();
            dTable.Columns.Add("bigname", typeof(string));
            dTable.Columns.Add("TradeBigTypeid", typeof(string));
          
            for (int i = 0; i < 10; i++)
            {
                DataRow dr = dTable.NewRow();
                dr["bigname"] = "bigname" + i.ToString();
                dr["TradeBigTypeid"] = "TradeBigTypeid" + i.ToString();
                dTable.Rows.Add(dr);
            }
            return dTable;
        }    public static DataTable GetMidType(string bigname)
        {
            DataTable dTable = new DataTable();
            dTable.Columns.Add("minname", typeof(string));
            dTable.Columns.Add("MinTypeid", typeof(string));
          
            for (int i = 0; i < 10; i++)
            { 
                DataRow dr = dTable.NewRow() ;
                dr["minname"] = "minname" + i.ToString();
                dr["MinTypeid"] = "MinTypeid" + i.ToString();
                dTable.Rows.Add(dr);
            }
            return dTable;
        }    public static DataTable GetSmallType(string bigname, string midname)
        {
            DataTable dTable = new DataTable();
            dTable.Columns.Add("smallname", typeof(string));
            dTable.Columns.Add("SmallTypeid", typeof(string));
           
            for (int i = 0; i < 10; i++)
            {
                DataRow dr = dTable.NewRow();
                dr["smallname"] = "smallname" + i.ToString();
                dr["SmallTypeid"] = "SmallTypeid" + i.ToString();
                dTable.Rows.Add(dr);
            }
            return dTable;
        }}
      

  5.   

    kyouken2007(乘凉) ( ) 信誉:100 
    搂主要厚道!http://community.csdn.net/Expert/topic/5770/5770820.xml?temp=.5174829在此也谢谢你帮我解决问题,但是你的意见我用过之后还是不行.
    由于我的问题没解决,所以就多发了几遍!如有对你有影响,请说明原因!谢鸟!
      

  6.   

    kyouken2007(乘凉) ( ) 信誉:100 
    你最好也尊重一下大家的劳动。你问问题,大家帮你解决,就算没解决也可以继续讨论。
    那个帖子里什么都不说,有出个一样的帖子,你这是对那个帖子里回答你问题人的不尊重。
    如果有对你的劳动不尊重的话,在此向你道歉!只是我在那边发的帖子没人反映了,所以就换地方发一下.很少用CSDN,所以里面的规矩不清楚,希望有冒犯的地方大家多多见谅!还希望以后大家能互相帮助!谢谢了!