关于 Repeater 控件嵌套的使用。在嵌套中添加 其它控件(如:按钮),并影响其它控件的方法,很重要哦,测试通过。
这里的Repeater 嵌套,是指在 外层的Repeater的 ItemTemplate 中 又添加了一个 Repeater ,并且在两层的Repeater中都添加了一个Button控件。我们要实现两个控件的事件响应。也就是点两个Button时执行相应的方法。
看 .aspx 代码:
1 <asp:Repeater ID="Repeater1" runat="server"
2 onitemdatabound="Repeater1_ItemDataBound"
3 onitemcommand="Repeater1_ItemCommand">
4 // 这是外层的Repeater。注意看最后一行。Onitemcommand 事件
5 <HeaderTemplate>
6 <table width="500" border="0" cellspacing="3" cellpadding="0">
7 </HeaderTemplate>
8
9 <ItemTemplate>
10 <tr>
11 <td width="72" height="30" bgcolor="#669966"><%# Eval("UserName") %></td>
12 <td height="30" bgcolor="#669966"><%# Eval("Title") %><div style="text-align: right; clear: right"><asp:Button Text="删除留言" runat="server" CommandName="deletely" CommandArgument='<%# Eval("ID") %>' />
13 //这是外层的Button。
14 </div></td>
15 </tr>
16 <tr>
17 <td height="30"></td>
18 <td height="30" bgcolor="#99FFCC"><%# Eval("cont") %></td>
19 </tr>
20 <tr>
21 <td height="30"> </td>
22 <td height="30">
23 <asp:Repeater ID="Repeater2" runat="server" onitemcommand="Repeater2_ItemCommand">
24 //这里嵌套到里面的第二Repeater。在这个控件中,也有一个Onitemcommand 事件的处理。
25 <HeaderTemplate>
26 <table width="415" border="0" cellspacing="3" cellpadding="0">
27 </HeaderTemplate>
28 <ItemTemplate>
29
30 <tr>
31 <td width="20%" height="30" bgcolor="#0099FF"><%# Eval("UserName") %></td>
32 <td height="30" bgcolor="#0099FF"><%# Eval("Title") %><div style="text-align: right; clear: right"><asp:Button ID="Button1" Text="删除回复" runat="server" CommandName="deletehf" CommandArgument='<%# Eval("ID") %>' />
33 // 这是内层的 Button。
34 </div></td>
35 </tr>
36 <tr>
37 <td height="30" colspan="2"><%# Eval("Reply") %></td>
38 </tr>
39
40 </ItemTemplate>
41
42 <FooterTemplate>
43 </table>
44 </FooterTemplate>
45 </asp:Repeater>
我们就是依靠 这两个 Onitemcommand 事件来执行代码的。
来看一下, .cs 代码
1 protected void Repeater1_ItemCommand(object source, RepeaterCommandEventArgs e)
2 //在这里处理第1个Button事件,因为这个Button位于第一个 Repeater中。
3 //在这里是不能捕捉到第二个Repeater控件中的Button事件的。
4 {
5 if (e.CommandName == "deletely")
6 {
7 int dlid = Convert.ToInt32(e.CommandArgument.ToString());
8 opclass opc = new opclass();
9 opc.ExectCmd(string.Format("Delete From [liuyan] Where ID={0}", dlid));
10 opclass opc1 = new opclass();
11 opc1.ExectCmd(string.Format("Delete From [Reply] Where lyID={0}", dlid));
12 bangdingdata();
13
14 }
15 }
16
17 protected void Repeater2_ItemCommand(object source, RepeaterCommandEventArgs e)
18 //在这里处理第2个Button事件,因为这个Button位于第二个 Repeater中。
19 {
20 if (e.CommandName == "deletehf")
21 {
22 int dlid = Convert.ToInt32(e.CommandArgument.ToString());
23 opclass opc = new opclass();
24 opc.ExectCmd(string.Format("Delete From [Reply] Where ID={0}", dlid));
25 bangdingdata();
26
27
28 }
29
30 }
提示:
点击外层的 Repeater 控件的时候,在属性对话框中,可以找到 OnitemCommand 事件,双击可以自动创造出对应的代码。
(也就是可以在属性对话框中点击那个小闪电符号找到对应的事件)但是当点击内层的Repeater的时候,是没有那个小闪电的。所以,在第二个
Repeater 中的 OnitemCommand事件只能手动添加上去,要在.aspx文件和.cs文件中分别添加对应的代码才行。添加完成后,程序会执行对应的代码。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架