动态从数据库读取菜单(ASP.NET版)

这几天一直打算作个从数据读取导航菜单的效果,之前作的时候都是写死的(太死了),好了话很少说,先看效果!html

我是个小菜,高手请不要喷!我在网上查了很久,说用menu控件,可是我用了不太好!最后我决定用repeater的嵌套来实现这个效果。先数据库结构吧!数据库

前台的代码:ui

 1 <body>
 2     <form id="form1" runat="server">
 3     <div class="menu">
 4         <ul class="nav">
 5             <asp:Repeater ID="rptNav" runat="server" OnItemDataBound="rptNav_ItemDataBound">
 6                 <ItemTemplate>
 7                     <li><a href='<%# DataBinder.Eval(Container.DataItem,"navUrl")%>'>
 8                         <%# DataBinder.Eval(Container.DataItem,"navTitle") %></a>
 9                         <asp:Repeater ID="rptSub" runat="server">
10                             <HeaderTemplate>
11                                 <ul class="sub-nav">
12                             </HeaderTemplate>
13                             <ItemTemplate>
14                                 <li><a href='<%# DataBinder.Eval(Container.DataItem,"navUrl")%>'>
15                                     <%# DataBinder.Eval(Container.DataItem,"navTitle") %></a></li>
16                             </ItemTemplate>
17                             <FooterTemplate>
18                                 </ul>
19                             </FooterTemplate>
20                         </asp:Repeater>
21                     </li>
22                 </ItemTemplate>
23             </asp:Repeater>
24         </ul>
25     </div>
26     </form>
27 </body>
28 </html>

后台的实现:spa

using System; using System.Collections.Generic; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Data.SqlClient; using System.Data; namespace LearnTest { public partial class Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { InitData(); } } /// <summary>
        /// 初始化数据 /// </summary>
        private void InitData() { SqlConnection cn = new SqlConnection(@"server=(local);uid=sa;pwd=xjai18749695757;database=Test"); SqlDataAdapter da = new SqlDataAdapter("select * from nav where parentId = 0",cn); DataSet ds = new DataSet(); cn.Open(); //打开数据库链接
 da.Fill(ds); rptNav.DataSource = ds.Tables[0].DefaultView; rptNav.DataBind(); cn.Close(); } //绑定一级菜单时绑定二级菜单
        protected void rptNav_ItemDataBound(object sender, RepeaterItemEventArgs e) { //判断repeater的数据绑定列
            if (e.Item.ItemType == ListItemType.Item ||e.Item.ItemType == ListItemType.AlternatingItem) { //当前一级菜单的ID
                string id = ((DataRowView)(e.Item.DataItem)).Row["Id"].ToString(); //找到下面的repeater控件 
                Repeater rpt = (Repeater)e.Item.FindControl("rptSub"); if (rpt!=null) { SqlConnection cn = new SqlConnection(@"server=(local);uid=sa;pwd=123456;database=Test"); SqlCommand cmd = new SqlCommand("select * from nav where parentId =@parentId",cn); cmd.Parameters.Add("@parentId",SqlDbType.VarChar,11).Value = id; cn.Open(); rpt.DataSource = cmd.ExecuteReader(); rpt.DataBind(); cn.Close(); } } } } }

这就是用repeater进行嵌套来进行实现的!code

相关文章
相关标签/搜索