動態從數據庫讀取菜單(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

相關文章
相關標籤/搜索