Repeater使用方法—基础数据绑定+多级嵌套「建议收藏」

发布时间:2025-12-09 14:02:13 浏览次数:6

一、基础数据绑定

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

效果图:

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

前台代码如下:

<head runat="server"> <title>员工管理</title> <link href="staffCSS.css" rel="stylesheet" type="text/css" /> </head> <body> <form  runat="server"> <p > <p > <p > 编号</p> <p > 姓名</p> <p > 性别</p> <p > 部门</p> <p > 操作</p> </p> <asp:Repeater ID="repStaff" runat="server" OnItemCommand="repStaff_ItemCommand" onitemdatabound="repStaff_ItemDataBound"> <ItemTemplate> <p > <asp:Label ID="lblID" runat="server" Text='<%#Eval("id")%>'></asp:Label></p> <p > <asp:Label ID="lblName" runat="server" Text='<%#Eval("staffName")%>'></asp:Label></p> <p > <asp:Label ID="lblSex" runat="server" Text='<%#Convert.ToBoolean(Eval("sex"))?"女":"男"%>'></asp:Label></p> <p > <asp:Label ID="lblDepartment" runat="server" Text='<%#Eval("departmentName") %>'></asp:Label></p> <p > <asp:LinkButton ID="update" CommandName="update" runat="server" PostBackUrl='<%#"ModefyStaff.aspx?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> </p> </form> </body>

其中staffCSS.css样式表如下:

body { text-align:center; } .pContent { width:700px; text-align:left; font-size:12px; } .pContent 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 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 > <dt> <%-- 可以在这里绑定父节点的ID,绑定子Repeater时,需要根据这个ID来查--%> <asp:HiddenField ID="hfid" runat="server" Value=' <%#Eval("id")%>' /> <asp:CheckBox ID="cbParent" runat="server" Text=' <%#Eval("MenuName")%>' onclick="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" onclick="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(); } } }
需要做网站?需要网络推广?欢迎咨询客户经理 13272073477