两个Repeater嵌套实现动态菜单
今天在实现一个增强web项目可扩展性的一个功能,把以前的静态菜单改成了动态的扩展、可维护的菜单
页面代码
- <asp:Repeater ID="Repeater1" runat="server"
- onitemdatabound="Repeater1_ItemDataBound">
- <ItemTemplate>
- <h1 class="type"><a href="javascript:void(0)"><%# DataBinder.Eval(Container.DataItem, "MT_name")%></a></h1>
- <asp:Repeater ID="Repeater2" runat="server">
- <HeaderTemplate>
- <div class="content">
- <table width="100%" border="0" cellspacing="0" cellpadding="0">
- <tr>
- <td><img src="p_w_picpaths/menu_topline.gif" width="182" height="5" /></td>
- </tr>
- </table>
- <ul class="MM">
- </HeaderTemplate>
- <ItemTemplate>
- <li><a href="<%# DataBinder.Eval(Container.DataItem, "MI_page")%>" target="main"><%# DataBinder.Eval(Container.DataItem, "MI_name")%></a></li>
- </ItemTemplate>
- <FooterTemplate>
- </ul></div>
- </FooterTemplate>
- </asp:Repeater>
- </ItemTemplate>
- </asp:Repeater>
后台代码:
- protected void Page_Load(object sender, EventArgs e)
- {
- if (!IsPostBack)
- {
- string sql = "select MT_ID,MT_name from ModuleTopInfo";
- DataTable dt = new DataTable();
- SqlDbHelper db = new SqlDbHelper();//SqlHelper类你懂得
- Repeater1.DataSource =db.ExecuteDataTable(sql);
- Repeater1.DataBind();
- }
- }
- protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
- {
- if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
- {
- string id = ((DataRowView)e.Item.DataItem).Row["MT_ID"].ToString();
- Repeater rpt = (Repeater)e.Item.FindControl("Repeater2");
- string sql = "select MI_ID,MI_page,MI_name from ModuleInfo where [email protected]";
- SqlParameter[] parameters = new SqlParameter[] {
- new SqlParameter("@id",id)
- };
- SqlDbHelper db = new SqlDbHelper();
- DataTable dt = new DataTable();
- dt = db.ExecuteDataTable(sql,CommandType.Text,parameters);
- if (rpt != null)
- {
- rpt.DataSource = dt;
- rpt.DataBind();
- }
- }
- }
转载于:https://blog.51cto.com/1143314007/623076