我的转发器嵌套在父转发器的ItemTemplate
中。我通常在标记中以声明方式将它们连接到控件。
<asp:Repeater runat='server' id='myParentRepeater'>
<ItemTemplate>
<asp:Repeater runat='server' id='mynestedRepeater' OnItemCommand='myMethod'>
...
</asp:Repeater>
...
</ItemTemplate>
</asp>
今天我决定在代码隐藏中执行此操作,特别是在父转发器的ItemDataBound
方法中./
((Repeater)e.item.FindControl("MyParentRepeater")).ItemCommand += ...
但它不会这样。除非我使用标记,否则事件处理程序不会触发。为什么是这样?或者,假设它应该工作,有人可以告诉我我做错了什么吗?
答案 0 :(得分:3)
ItemDataBound
事件仅在Repeater
为数据绑定时触发,而不是在每次回发时触发。但必须在每次回发时重新创建事件。因此,请改用ItemCreated
事件。
protected void myParentRepeater_ItemCreated(Object Sender, RepeaterItemEventArgs e) {
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) {
((Repeater)e.item.FindControl("MyParentRepeater")).ItemCommand += ...
}
}
答案 1 :(得分:1)
ADD
OnItemCommand="repNested_ItemCommand"
到
<asp:Repeater ID="rptNested" runat="server" OnItemCommand="repSales_ItemCommand">
代码隐藏:
Protected Sub repNested_ItemCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.RepeaterCommandEventArgs)
Select Case e.CommandName
// Do whatever you want