数据库结构 类似如下
id  parentid text url
1    0       A    A.aspx 
2    1       a1   a1.aspx 
3    1       a2    a2.aspx 
4    0       B    A.aspx 
5    4       b1   b1.aspx 
6    4        b2    b2.aspx 

解决方案 »

  1.   

    下面贴出来的是tree的例子,
    menu的话,吧treenode改成menuitem即可
     
    protected void Page_Load(object sender, EventArgs e)
            {
                if (!IsPostBack)
                {
                    string url = ConfigurationManager.ConnectionStrings["conStr"].ToString();
                    SqlConnection con = new SqlConnection(url);                string sql =@"select * from menu a,ruleinfo b
                                where a.id=b.menuid
                                and b.ruleid=2";
                    DataTable dt = new DataTable();
                    SqlDataAdapter da = new SqlDataAdapter(sql, con);
                    da.Fill(dt);                DataRow[] dtlist = dt.Select("fid=0");//取出所有的根节点
                    foreach (DataRow dr in dtlist)
                    {                    //产生一个节点
                        TreeNode t = new TreeNode();
                        t.Text = dr["title"].ToString();//给节点赋值
                        t.NavigateUrl = dr["url"].ToString();//设定节点的超链接
                        t.Value = dr["id"].ToString();//保存一个值到value
                        t.Target = "_blank";//设定链接打开方式
                        string id = dr["id"].ToString();
                        #region
                        /*
                        DataRow[] dtcList = dt.Select("fid='" + id + "'");
                        foreach (DataRow dr1 in dtcList)
                        {
                            TreeNode t1 = new TreeNode();
                            t1.Text = dr1["title"].ToString();
                            t1.NavigateUrl = dr1["url"].ToString();
                            t.ChildNodes.Add(t1);
                        }*/
                        #endregion
                        //GetChild(dt,id,t) 取得当前节点的所有子节点
                        TreeView1.Nodes.Add(GetChild(dt,id,t));
                    }
                }
            }        private TreeNode GetChild(DataTable dt, string id, TreeNode t)
            {            DataRow[] dtcList = dt.Select("fid='" + id + "'");
                foreach (DataRow dr1 in dtcList)
                {
                    TreeNode t1 = new TreeNode();
                    t1.Text = dr1["title"].ToString();
                    t1.NavigateUrl = dr1["url"].ToString();
                    string cid= dr1["id"].ToString();
                    t.ChildNodes.Add(GetChild(dt,cid, t1));//递归调用函数进行循环添加所有的子节点
                }
                return t;
            }