2012-12-10 26 views
0

我有一箇中繼器嵌套在父Repeater的ItemTemplate中。我通常用標記將它們連接到控件聲明。嵌套中繼器 - ItemCommand只有通過標記連接纔會觸發

<asp:Repeater runat='server' id='myParentRepeater'> 
    <ItemTemplate> 
     <asp:Repeater runat='server' id='mynestedRepeater' OnItemCommand='myMethod'> 
      ... 
     </asp:Repeater> 
     ... 
    </ItemTemplate> 
</asp> 

今天,我決定做它的代碼隱藏,特別是在父母的ItemDataBound方法repeater./

((Repeater)e.item.FindControl("MyParentRepeater")).ItemCommand += ... 

但它不會以這種方式工作。除非我使用標記,否則事件處理程序不會觸發。爲什麼是這樣?或者,假設它應該工作,有人可以告訴我我做錯了什麼?

回答

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 += ... 
     } 
}  
+0

是否在每次回發'ItemCreated'火?無論控制權是否反彈?我一直認爲接線是用javascript來完成的,它可以持續回傳... – 5arx

+1

@ 5arx:是的,'ItemCreated'是當項目(或者在GridView的情況下是行並且它是'RowCreated' - 事件)被重新創建。這就是控件實際創建的地方。 –

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