嵌套的Repeater - ItemCommand仅在通过标记附加时触发

时间:2012-12-10 15:41:55

标签: asp.net events repeater webforms databound-controls

我的转发器嵌套在父转发器的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 += ...

但它不会这样。除非我使用标记,否则事件处理程序不会触发。为什么是这样?或者,假设它应该工作,有人可以告诉我我做错了什么吗?

2 个答案:

答案 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