一、基础数据绑定

  Repeater控件在编译后不会生成任何多余的代码,而GridView等编译后会生成table标签,这样对于页面的负担和UI样式影响方面,使用Repeater就会显得很有优势了。下面简单说明一下Repeater绑定数据库的方法。

效果图:

说明:只有男性可以执行删除功能。

前台代码如下:

<head runat="server"><title>员工管理</title><link href="staffCSS.css" rel="stylesheet" type="text/css" />
</head>
<body><form id="form1" runat="server"><div class="divContent"><div class="dtcss"><p class="dt_p">编号</p><p class="dt_p">姓名</p><p class="dt_p">性别</p><p class="dt_p">部门</p><p class="dt_p">操作</p></div><asp:Repeater ID="repStaff" runat="server" OnItemCommand="repStaff_ItemCommand" onitemdatabound="repStaff_ItemDataBound"><ItemTemplate><p class="dt_p"><asp:Label ID="lblID" runat="server" Text='<%#Eval("id")%>'></asp:Label></p><p class="dt_p"><asp:Label ID="lblName" runat="server" Text='<%#Eval("staffName")%>'></asp:Label></p><p class="dt_p"><asp:Label ID="lblSex" runat="server" Text='<%#Convert.ToBoolean(Eval("sex"))?"女":"男"%>'></asp:Label></p><p class="dt_p"><asp:Label ID="lblDepartment" runat="server" Text='<%#Eval("departmentName") %>'></asp:Label></p><p class="dt_p"><asp:LinkButton ID="update" CommandName="update" runat="server" PostBackUrl='<%#"ModefyStaff.aspx?id="+Eval("staffid")%>'Text="编辑"></asp:LinkButton><asp:LinkButton ID="delete" CommandName="delete" runat="server" CommandArgument='<%#Eval("staffid") %>'OnClientClick="javascript:return confirm('确认删除此信息吗?')" Text="删除"></asp:LinkButton></p></ItemTemplate></asp:Repeater></div></form>
</body>

其中staffCSS.css样式表如下:

body
{text-align:center;}
.divContent
{width:700px;text-align:left;font-size:12px;
}
.divContent p:hover
{background-color:Orange;
}
.dt_p
{width:18%;float:left;height:20px;
}.dtcss
{background-color:Lime;width:100%;line-height:20px;height:20px;
}

后台代码:

protected void Page_Load(object sender, EventArgs e){if (!IsPostBack){BindStaff();}}//绑定数据private void BindStaff(){string connstr = "Data Source=.;Initial Catalog=RepeaterSummary;User ID=sa;Password=123456;";SqlConnection conn = new SqlConnection(connstr);if (conn.State == System.Data.ConnectionState.Closed)conn.Open();string sqlstr = @"select ROW_NUMBER() over(order by s.id) id,s.id as staffid,s.staffName,s.sex,d.departmentName from Staff s,Department d where s.departmentid=d.id";SqlDataAdapter sda = new SqlDataAdapter(sqlstr, conn);DataSet ds = new DataSet();sda.Fill(ds);ds.Dispose();conn.Close();if (ds != null){                this.repStaff.DataSource = ds;this.repStaff.DataBind();}}//生成事件时触发protected void repStaff_ItemCommand(object source, RepeaterCommandEventArgs e){if (e.CommandName=="update"){//跳转至修改页面
            }if (e.CommandName == "delete"){int id =Convert.ToInt32(e.CommandArgument);string connstr = "Data Source=.;Initial Catalog=RepeaterSummary;User ID=sa;Password=123456";SqlConnection conn = new SqlConnection(connstr);if (conn.State==System.Data.ConnectionState.Closed){conn.Open();}string sqlstr = "delete from Staff where id=" + id;SqlCommand comm = new SqlCommand(sqlstr, conn);int delInt = comm.ExecuteNonQuery();if (delInt > 0)BindStaff();}}//数据绑定时触发protected void repStaff_ItemDataBound(object sender, RepeaterItemEventArgs e){Label lblsex = (Label)e.Item.FindControl("lblSex");LinkButton lbupdate = (LinkButton)e.Item.FindControl("update");LinkButton lbdelete = (LinkButton)e.Item.FindControl("delete");if (lblsex!=null){if (lblsex.Text.Trim() == "女"){lbupdate.Visible = false;//lbdelete.Visible = false;
                }}}}

—————————————————————————————忧郁的分隔符——————————————————————————————————————

二 、多级嵌套

  如果数据展示需要现实父子孙等多级关系,如图:

            

需要两个或多个Repeater嵌套使用,使用方法是:
1. 前台代码定义时,在父Repeater内部定义子Repeater,子Repeater内部定义孙Repeater。如代码:

<!-- 父Repeater开始 --><asp:Repeater ID="parentRepeater" runat="server" OnItemDataBound="parentRepeater_ItemDataBound"><ItemTemplate><dl id="dlrepeater"><dt><%-- 可以在这里绑定父节点的ID,绑定子Repeater时,需要根据这个ID来查--%><asp:HiddenField ID="hfid" runat="server" Value=' <%#Eval("id")%>' /><asp:CheckBox ID="cbParent" runat="server" Text=' <%#Eval("MenuName")%>' οnclick="javascript:FormSelectAll('form1','cbChild',this);" /></dt><!-- 子Repeater开始 --><asp:Repeater ID="childRepeater" runat="server" OnItemDataBound="childRepeater_ItemDataBound"><ItemTemplate><dd><%--同理,绑定子节点的ID,供孙子Repeater查询绑定时用--%><asp:HiddenField ID="hfidchild" runat="server" Value=' <%#Eval("id")%>' /><asp:CheckBox name="cbChild" ID="cbChild" runat="server" Text=' <%#Eval("MenuName")%>'CssClass="abcd" οnclick="javascript:FormSelectAllGrant('form1','cbGrantchild',this);" /></dd><!-- 孙Repeater开始 --><asp:Repeater ID="grantchildRepeater" runat="server"><ItemTemplate><dd><asp:HiddenField ID="hfidgrantchild" runat="server" Value=' <%#Eval("id")%>' />&nbsp;&nbsp;&nbsp;<asp:CheckBox name="cbGrantchild" ID="cbGrantchild" runat="server"Text=' <%#Eval("MenuName")%>' CssClass="abcd" /></dd></ItemTemplate></asp:Repeater><!-- 孙Repeater结束 --></ItemTemplate></asp:Repeater><!-- 子Repeater结束 --></dl></ItemTemplate></asp:Repeater><!-- 父Repeater结束 -->

2. 绑定数据时,在父Repeater的ItemDataBound事件中绑定子Repeater,在子Repeater的ItemDataBound事件中绑定孙Repeater。如代码:

//绑定父Repeater时触发protected void parentRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e){if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem){HiddenField hf = (HiddenField)e.Item.FindControl("hfid");Repeater rpchild = (Repeater)e.Item.FindControl("childRepeater");if (hf != null || hf.ToString() != ""){int id = Convert.ToInt32(hf.Value);rpchild.DataSource = BLLmenu.GetMenuChild(id);//根据父节点id查询子节点
                    rpchild.DataBind();}}}//绑定子Repeater时触发protected void childRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e){if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem){HiddenField hf = (HiddenField)e.Item.FindControl("hfidchild");Repeater rpgrantchild = (Repeater)e.Item.FindControl("grantchildRepeater");if (hf != null || hf.ToString() != ""){int id = Convert.ToInt32(hf.Value);rpgrantchild.DataSource = BLLmenu.GetMenuChild(id);//根据父节点id查询子节点
                    rpgrantchild.DataBind();}}}

转载于:https://www.cnblogs.com/yinluhui0229/archive/2012/08/18/2644944.html

Repeater使用方法---基础数据绑定+多级嵌套相关推荐

  1. 【Day13】说一下 Vue 组件的通信方式都有哪些?(父子组件,兄弟组件,多级嵌套组件等等)

    说一下 Vue 组件的通信方式都有哪些?(父子组件,兄弟组件,多级嵌套组件等等) 一.父组件向子组件传值 二.子组件向父组件传值 三.兄弟组件传值 四.跨组件 一.父组件向子组件传值 1.1 prop ...

  2. databinder.eval绑定数据的时候显示html标签,c#教程之基于DataBinder.Eval方法的数据绑定...

    https://www.xin3721.com/eschool/ 10.2.5基于DataBinder.Eval方法的数据绑定 为将绑定的数据按指定数据类型转化为字符串,可以使用String.Form ...

  3. UA OPTI501 电磁波 经典电动力学中的Fourier方法基础

    UA OPTI501 电磁波 经典电动力学中的Fourier方法基础 4-D Spatial-temporal Fourier变换 常用的Fourier变换结论 1的Fourier变换是Dirac函数 ...

  4. if-else多级嵌套,输入3/4/5个数寻找最大值(太多了容易乱!!!)

    哎呀呀,心累啊,玩这个多级嵌套,眼花~ 多级嵌套有序3个数(找最大值) a,b,c=eval(input("a,b,c")) if a>b:pass #a (a,b)if a ...

  5. 数字化方法基础_常用函数

    数字化方法基础_常用函数 1. 叉乘 2. 单位化矢量 3. 矩阵乘法4×4 × 4×1 4. 矩阵乘法 4×4 × 4×4 1. 叉乘 void crossproject(float vec1[3] ...

  6. 数字化方法基础(四)_矩阵操作

    数字化方法基础(四)_矩阵操作 Chapter 7 矩阵操作 利用矩阵实现向量平移 使用矩阵实现向量旋转 如何让图形既平移又旋转 坐标系的旋转 让图形显示在屏幕中心且绕中心转动 全部教程链接: htt ...

  7. 数字化方法基础(三)_导入本地模型

    数字化方法基础(三)_导入本地模型 Chapter 6 导入本地模型 如何创建一个列表 如何读取本地模型 全部教程链接: https://blog.csdn.net/weixin_44543463/a ...

  8. 数字化方法基础(二)_点的投影

    数字化方法基础(二)_点的投影 Chapter4 用OpenGL生成点的投影 计算点的投影的基本原理 如何编写程序实现点的投影 Chapter5 如何使用VS2010的调试功能 全部教程链接: htt ...

  9. 数字化方法基础(一)_基础操作与生成四面体

    数字化方法基础(一)_基础操作与生成四面体 Chapter1 VisualStudio2010 Express如何创建新工程 Chapter2 SB-WinSRC的使用方法 Chapter3 用Ope ...

  10. JS 中引号多级嵌套

    2019独角兽企业重金招聘Python工程师标准>>> js中引号多级嵌套: 1.第一级 "" :     2.第二级 '' : 3.第三级\"  \& ...

最新文章

  1. 【高并发】又一个朋友面试栽在了Thread类的stop()方法和interrupt()方法上!
  2. 关于我自己的三个层次
  3. Mysql5.7后的password加密和md5
  4. mybatis plus 事务管理器_SpringBoot第七篇:springboot开启声明式事务
  5. 小程序类似抖音视频整屏切换
  6. python决策树 value_机器学习 | 算法笔记(四)- 决策树算法以及代码实现
  7. 第三章 组装个人计算机
  8. Docker 资源限制之内存
  9. 通讯超时什么意思_威伦触摸屏通讯报错了怎么办?
  10. Lua调用c++ DLL 文件
  11. java数组base64编码,java将base64编码字符串还原为字节数组
  12. 前端vue导出excel
  13. 场地测量的方法和程序_场地平整测量
  14. java方法重载的好处_Java方法重载浅谈
  15. 安卓版文件转换器如何使用?
  16. android 4g wifi热点,全网通吃!中兴MF910S 4G无线热点上手体验
  17. mysql 怎么存储毫秒,MySQL存储毫秒数据的方法
  18. 3Dmax专用快捷键大全(保姆式手把手教)
  19. Pdf+Word+Visio+MATLAB输出的3维图像不清晰
  20. 精品收藏:GitHub人工智能AI开源项目

热门文章

  1. 河北2021高考成绩查询具体时间,2021河北高考时间具体安排表
  2. Flink Forward Asia 2020 -- Keynote 总结
  3. Android通过AIDL与远程服务通信
  4. FFmpeg总结(十三)用ffmpeg基于nginx实现直播功能,不用第三方SDK,自研推流拉流
  5. Go基础-核心特性和前景
  6. oracle sysman 不存在_Oracle数据库中SYS、SYSTEM、DBSNMP、SYSMAN四用户的区别
  7. pci系列微型计算机,PCI系列586/60微型计算机,其中PCI是()。
  8. beamer插入图片_利用Pandoc将Markdown转化为beamer(七)Pandoc的命令行参数
  9. JS实现静默发送邮件功能(选择填报提交后发送、数据查询后发送参考前者)
  10. PyTorch实现CNN