asp.net 连数据库动态生成menu中的菜单项

第一步 建表

create table TreeTest
(
 id int identity(1,1) primary key ,
 treeId int,  --数形结构 1,代表根目录 2,代表根的下一级目录,3代表根的子目录的子目录。。依次类推
 names varchar(200), --url传的参数值
 page varchar(200)    --页面
)
--添加测试数据
insert into TreeTest select 1,'张三','default.aspx'
 union all select 2,'李四','default1.aspx'
 union all select 2,'王五','default2.aspx'
 union all select 2,'唐僧','default3.aspx'
 union all select 3,'八戒','default4.aspx'
 union all select 3,'八戒','default5.aspx'

第二步 在页面写如下代码

<body>
    <form id="form1" runat="server">
    <div>
     <asp:Menu ID="Menu1" runat="server">
        </asp:Menu>
    </div>
    </form>
</body>

第三步 在页面后台写如下代码(注意不要整个复制,因为类名不一样)

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;
using System.Data.SqlClient;
using System.Data.ProviderBase;
using System.Data.SqlClient;

public partial class _Default : System.Web.UI.Page
{
   DataSet ds = new DataSet();
    protected void Page_Load(object sender, EventArgs e)
    {


        //Menu1.Items.Add(i1);
        //i1.ChildItems.Add(i2);
        //  在此处放置用户代码以初始化页面 
        SqlConnection CN = new SqlConnection("server=数据名连接地址;User id=;pwd=;database=tempdb");

        //初始化连接字符串 

        CN.Open();
        //添加命令,从数据库中得到数据 
        SqlCommand sqlCmd = new SqlCommand();
        sqlCmd.Connection = CN;
        sqlCmd.CommandText = "select  *  from  TreeTest";
        sqlCmd.CommandType = CommandType.Text;
        SqlDataAdapter adp = new SqlDataAdapter(sqlCmd);
        adp.Fill(ds);


        //调用递归函数,完成树形结构的生成 
        //tn2=AddTree(0,  (TreeNode)null); 
        //TreeView1.Nodes.Add(tn2); 
        AddTree(1, (MenuItem)null);
    }
    public void AddTree(int ParentID, MenuItem pNode)
    {
        string url1;
        string url2;
        string url3;
        string url4;

        MenuItem mi = new MenuItem();
        //TreeNode  tn1  =  new  TreeNode(); 
        DataView dvTree = new DataView(ds.Tables[0]);
        //过滤ParentID,得到当前的所有子节点 
        dvTree.RowFilter = "treeId  =  " + ParentID;
        foreach (DataRowView Row in dvTree)
        {
            if (pNode == null)
            {        //'?添加根节点 
                url1 = Row["names"].ToString();
                url2 = Row["page"].ToString() + "?name=" + url1;
                mi.Text = url1;
                mi.NavigateUrl = url2;
                mi.Target = "_blank";
                //  tn1.Text  =  url1; 
                //  tn1.NavigateUrl  =  url2; 
                Menu1.Items.Add(mi);
                //    TreeView1.Nodes.Add(tn1); 
                AddTree(Int32.Parse(Row["id"].ToString()) + 1, mi);        //再次递归 
            }
            else
            {      //添加当前节点的子节点 
                //  TreeNode  tn2  =  new  TreeNode(); 

                MenuItem m2 = new MenuItem();
                url3 = Row["names"].ToString();
                url4 = Row["page"].ToString() + "?name=" + url3;
                m2.Text = url3;
                m2.NavigateUrl = url4;
                m2.Target = "_blank";
                //tn2.Text  =  url3; 
                //tn2.NavigateUrl  =  url4; 
                pNode.ChildItems.Add(m2);  //修改的地方
                //  pNode.ChildNodes.Add(tn2); 
                AddTree(Int32.Parse(Row["id"].ToString()) + 1, m2);        //再次递归 
            }

        }
    }
}

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值