Имам повторител, вграден в 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 += ...
Но няма да работи по този начин. Освен ако не използвам маркер, тренажорът на събитието няма да се изстреля. Защо е това? Или, приемайки го Трябва работа, може ли някой да ми каже какво съм направил погрешно?
Отговори:
3 за отговор № 1Най- 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 за отговор № 2
ДОБАВИ
OnItemCommand="repNested_ItemCommand"
да се
<asp:Repeater ID="rptNested" runat="server" OnItemCommand="repSales_ItemCommand">
CodeBehind:
Protected Sub repNested_ItemCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.RepeaterCommandEventArgs)
Select Case e.CommandName
// Do whatever you want