先来张图片说明下我们要实现的菜单:

这个菜单只实现了2级哈。

我采用的方法是嵌套2个Repeater。

先看下数据库中的表结构:

数据:

上代码:

aspx:

  1. <asp:Repeater ID="rptMenus" runat="server"
  2. onitemdatabound="rptMenus_ItemDataBound">
  3. <HeaderTemplate>
  4. <ul class="mnuLevel01">
  5. <li id="mnuHome"><a href="#">首页</a></li>
  6. </HeaderTemplate>
  7. <ItemTemplate>
  8. <li class="multiItem">
  9. <a target="<%#DataBinder.Eval(Container.DataItem,"target") %>" href="<%#DataBinder.Eval(Container.DataItem,"Url") %>"><%#DataBinder.Eval(Container.DataItem,"Title") %></a>
  10. <asp:Repeater ID="rptSubMenus" runat="server">
  11. <HeaderTemplate>
  12. <ul class="mnuLevel02">
  13. </HeaderTemplate>
  14. <ItemTemplate>
  15. <li><a href="<%#DataBinder.Eval(Container.DataItem,"Url") %>"><%#DataBinder.Eval(Container.DataItem,"Title") %></a></li>
  16. </ItemTemplate>
  17. <FooterTemplate>
  18. </ul>
  19. </FooterTemplate>
  20. </asp:Repeater>
  21. </li>
  22. </ItemTemplate>
  23. <FooterTemplate>
  24. </ul>
  25. </FooterTemplate>
  26. </asp:Repeater>

cs代码:

  1. private DataSet dsMenus;//菜单
  2. protected void Page_Load(object sender, EventArgs e)
  3. {
  4. //绑定主菜单
  5. string connStr = "Data Source=ip地址;Initial Catalog=数据库名;User Id=sa;password=密码;";
  6. //SqlConnection conn = new SqlConnection(connStr);
  7. //conn.Open();
  8. string cmdText = "SELECT * FROM EP_menus WHERE status=1 ORDER BY orderid ASC,id ASC";
  9. //SqlCommand cmd = new SqlCommand(cmdText, conn);
  10. SqlDataAdapter adapter = new SqlDataAdapter(cmdText, connStr);
  11. dsMenus = new DataSet();
  12. adapter.Fill(dsMenus);
  13. DataView dvTopMenus = new DataView(dsMenus.Tables[0]);
  14. dvTopMenus.RowFilter = "[parent]=0";
  15. rptMenus.DataSource = dvTopMenus;
  16. rptMenus.DataBind();
  17. }
  18. protected void rptMenus_ItemDataBound(object sender, RepeaterItemEventArgs e)
  19. {
  20. if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
  21. {
  22. Repeater rptSMenus = (Repeater)e.Item.FindControl("rptSubMenus");
  23. DataRowView drv = (DataRowView)e.Item.DataItem;
  24. int pMenu = Convert.ToInt32(drv["id"]);//父级菜单id
  25. //if (pMenu != 0)
  26. //{
  27. DataView dvSubMenus = new DataView(dsMenus.Tables[0]);
  28. dvSubMenus.RowFilter = "[parent]=" + pMenu;
  29. if (dvSubMenus.Count > 0)
  30. {
  31. rptSMenus.DataSource = dvSubMenus;
  32. rptSMenus.DataBind();
  33. }
  34. //}
  35. }
  36. }

这里只是个大体的思路和代码,具体的Repeater等资料请参考其他的教程。

(转)asp.net(C#)手记之Repeater与两级菜单的更多相关文章

  1. ASP.NET(C#) Repeater分页的实现

    ASP.NET(C#) Repeater分页的实现 第一种方式: 数据库连接代码: using System; using System.Data; using System.Configuratio ...

  2. 在asp.net中使用confirm可以分为两种:

    在asp.net中使用confirm可以分为两种: 1.没有使用ajax,confirm会引起也面刷新 2.使用了ajax,不会刷新 A.没有使用ajax,可以用StringBuilder来完成. ( ...

  3. ASP.NET MVC 表单提交多层子级实体集合数据到控制器中

    于遇到了项目中实体类嵌套多层子级实体集合,并且子级实体集合的数据需要提交保存到数据库中的问题.针对此情况需要进行一些特殊的处理才可以将整个 实体类及子级实体集合数据提交表单到控制器中,解决的方法是根据 ...

  4. asp.net控件(1)Repeater

    1. 通过Repeater和数据源创建表格 <AlternatingItemTemplate>属性可以控制单元格交替显示不同的背景颜色 <table width=" sty ...

  5. 在Asp.Net MVC中使用Repeater控件

    使用Repeater控件在视图中展示图表信息,Repeater控件的使用概述: <asp:Repeater ID="Repeater1" runat="server ...

  6. ASP转PHP手记

    打算将动易网站管理系统移植到PHP环境中,寻寻觅觅了很多PHP内容管理网站,发现网上有动易转PHPCMS的代码,所以就拿定注意用PHPCMS的在google上找到一转换程序,动手做来还成功了,现将此次 ...

  7. 030. asp.net中DataList数据绑定跳转(两种方式)的完整示例

    前台代码: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.as ...

  8. ASP.NET MVC 开发中遇到的两个小问题

    最近在做一个网站,用asp.net MVC4.0来开发,今天遇到了两个小问题,通过查找相关渠道解决了,在这里把这两个问题写出来,问题非常简单,不喜勿喷,mark之希望可以给遇到相同问题的初学者一点帮助 ...

  9. 子级Repeater获取 父级Repeater

    第一种方法,子级Repeater中绑定父级的某个字段: <%# DataBinder.Eval((Container.NamingContainer.NamingContainer as Rep ...

随机推荐

  1. Python正则表达式一

    推荐 http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html#!comments 这篇博客超好,建议收藏. 不过对于正则表达式小白,他没 ...

  2. Java下载Servlet Demo

    request.setCharacterEncoding("utf-8"); String name=request.getParameter("name"); ...

  3. [转]extern,static存储空间矛盾

    其实,这两个语句的位置不同,会出现不同的解释.这主要是由于 static 具有的两重意义所导致的: (1) 如果 static int foo; 这一句位于函数中,则 static 表示的是存储属性, ...

  4. .net防止刷新重复提交(转)

    net 防止重复提交 微软防止重复提交方案,修改版 Code ; i < cookie.Values.Count; i++)                     log.Info(" ...

  5. Python交互模式下方向键出现乱码

    解决办法如下: 1.安装readline模块 readline库是bash shell用的库,包含许多功能,如命令行自动补全等. ubuntu下安装的命令:   sudo apt-get instal ...

  6. PreparedStatement執行sql語句

    import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import org ...

  7. 汇编下的i++与++i

    故事背景,一个正在c语言的家伙,问我++i 和 i++的问题,我当时因为要去上课没给他说,正好今晚有空就测试了一下如下代码: 编译环境:VS2010  语言:C++ #include <iost ...

  8. JS版本网站资源状态检测

    Title:JS版本网站资源状态检测  --2012-08-28 14:08 前几天需要一个网站状态检测的东东,后面写了个蹩脚的JS版本,里面用到了以前没用过的东西,在这里记下来,其实批处理加curl ...

  9. QML控件类关系图

    花了点时间整理了下QML控件之间的关系图和QML控件和C++类的对应关系,基于Qt5.6版本 其他版本可能会有差异 图片像素比较大,另存为后放大图片就可以看清楚了 工程下载地址 QMLClassDia ...

  10. rsyslog 读取单个文件测试

    rsyslog 测试(rsyslog 必须yum 安装uat-web02:/root# rpm -qa | grep rsyslog rsyslog-8.21.0-1.el6.x86_64) //读取 ...