两个Repeater嵌套实现动态菜单(ado.net+sql和xml+Linq两种读取数据方式)
2011-07-25 17:58
961 查看
今天在实现一个增强web项目可扩展性的一个功能,把以前的静态菜单改成了动态的扩展、可维护的菜单
1、菜单存储在数据表中
服务器端代码
实现效果截图
View Code
后台代码
实现截图
1、菜单存储在数据表中
<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="images/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>
服务器端代码
publicpartialclass left : System.Web.UI.Page { protectedvoid Page_Load(object sender, EventArgs e) { if (!IsPostBack) { string sql ="select MT_ID,MT_name from ModuleTopInfo"; SqlDbHelper db =new SqlDbHelper();//SqlHelper类你懂得 Repeater1.DataSource =db.ExecuteDataTable(sql); Repeater1.DataBind(); } } protectedvoid 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 MT_ID=@id"; 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(); } } }
实现效果截图
View Code
<asp:Repeater ID="Repeater1" runat="server" onitemdatabound="Repeater1_ItemDataBound"> <ItemTemplate> <tr> <td class="menu_first_img mouse" id="td<%# DataBinder.Eval(Container.DataItem, "id") %>" onClick="show(<%# DataBinder.Eval(Container.DataItem, "id") %>)"><div class="menu" ><a href="#" style=" color:White; text-decoration:none"> <%# DataBinder.Eval(Container.DataItem, "Text")%> </a> </div></td> </tr> <tr> <td id="show<%# DataBinder.Eval(Container.DataItem, "id") %>" style=" display:none;" ><table width="100%" border="0" cellspacing="0" cellpadding="0"> <asp:Repeater ID="Repeater2" runat="server"> <ItemTemplate> <tr> <td class="left"><table width="100%" height="24" border="0" cellpadding="0" cellspacing="0"> <tr> <td width="40" align="center"><img src="../images/5.png" alt="1" width="16" height="16"></td> <td><div class="menu1"><a href="<%# DataBinder.Eval(Container.DataItem, "url")%>" style=" color:White; text-decoration:none"> <%# DataBinder.Eval(Container.DataItem, "menuText")%> </a> </div></td> </tr> </table></td> </tr> </ItemTemplate> </asp:Repeater></table></td></tr> </ItemTemplate> </asp:Repeater>
后台代码
protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { string path = Server.MapPath("~/Manger/MenuXML/admin.xml"); XElement root = XElement.Load(path); var result = from menu in root.Elements("Menus") select new { Text = menu.Attribute("Text").Value, ID = menu.Attribute("id").Value }; Repeater1.DataSource = result; Repeater1.DataBind(); } } protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e) { if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) { string id = DataBinder.Eval(e.Item.DataItem, "id").ToString(); Repeater rpt = (Repeater)e.Item.FindControl("Repeater2"); string path = Server.MapPath("~/Manger/MenuXML/admin.xml"); XElement root = XElement.Load(path); var result = from menu in root.Descendants("MenuItem") where menu.Attribute("id").Value.Equals(id) select new { menuText = menu.Attribute("Text").Value, url = menu.Attribute("url").Value, curid = menu.Attribute("id").Value }; if (rpt != null) { rpt.DataSource = result; rpt.DataBind(); } } }
实现截图
相关文章推荐
- 在Silverlight中读取ADO.NET数据服务的两种方式
- 在Silverlight中读取ADO.NET数据服务的两种方式
- ASP.NET+SQL Server利用XML实现动态菜单
- ASP.NET网站开发--LINQ to SQL-动态数据支持
- ado.net读取数据的两种方法
- 读取xml通过deserialize和linq to sql快速更新数据表
- ASP.NET网站开发——LINQ TO SQL 动态数据支持
- c#读取XML内容实现动态加载菜单
- ADO 与ADO.NET两种数据访问方式区别。
- LINQ-to-SQL那点事~利用反射在LINQ-to-SQL环境中实现Ado.net的CURD操作
- C#.NET示例读写xml所有节点的代码实现方法和读取xml节点的数据总结
- 【转载】ADO.NET与ORM的比较(3):Linq to SQL实现CRUD
- C#.NET示例读写xml所有节点的代码实现方法和读取xml节点的数据总结
- C#——通过XML读取左侧菜单实现Extjs菜单动态加载
- 关于ADO.NET下数据的两种访问方式
- ADO 与ADO.NET两种数据访问方式区别?
- Java实现SparkSQL Thrift方式读取Hive数据
- ADO 与ADO.NET两种数据访问方式区别
- ADO与ADO.NET两种数据访问方式区别
- ADO.NET实现Excel数据的读取