2010-03-23 5 views
0

J'ai un contrôle Repeater qui charge les instances d'un contrôle personnalisé que j'ai construit. Ce répéteur ressemble à ceci:ASP.NET Chargement d'un contrôle utilisateur dans un répéteur

<asp:Repeater ID="myRepeater" runat="server" OnLoad="myRepeater_Load"> 
    <HeaderTemplate> 
    <table border="0" cellpadding="0" cellspacing="0"> 
    </HeaderTemplate> 

    <ItemTemplate> 
    <tr><td><my:CustomControl ID="myControl" runat="server" 
     OnLoad="myControl_Load" /> 
    </td></tr> 
    </ItemTemplate> 

    <FooterTemplate> 
    </table> 
    </FooterTemplate> 
</asp:Repeater> 

Je lie au répéteur par le gestionnaire d'événements myRepeater_Load. Mon contrôle personnalisé est utilisé pour rendre un élément dans le répéteur. À cause de cela, j'essaie de définir des propriétés sur le contrôle personnalisé au cours du gestionnaire d'événements myControl_Load. Cependant, je ne sais pas comment accéder à l'élément actuel pendant l'événement myControl_Load.

Y a-t-il un moyen de transmettre l'élément actuel ou d'accéder à l'élément actuel pendant l'événement myControl_Load? Si c'est le cas, comment?

Merci,

Répondre

3
<asp:Repeater ID="rptrDemo" runat="server" OnItemDataBound="rptrDemo_ItemDataBound"> 
    <ItemTemplate> 
     <demo:Sample runat="server" ID="sampleControl" /> 
    </ItemTemplate> 
</asp:Repeater> 


protected void rptrDemo_ItemDataBound(object sender, RepeaterItemEventArgs e) 
{ 
    if (e.Item.DataItem != null) 
    { 
     SampleControl sampleControl = (SampleControl)e.Item.FindControl("sampleControl"); 
     // do whatever 
    } 
} 
0

Vous devez utiliser l'événement OnItemDataBound du répéteur.

+0

Mais comment puis-je accéder à mon contrôle personnalisé de l'événement OnItemDataBound alors? – user70192

+0

L'objet args d'événement vous permettra d'accéder à votre contrôle via e.Item.FindControl() - mais vous devrez le lancer. Personnellement, je méprise OnItemDataBound et l'éviter à tout prix – Eric

+0

@ Eric, que recommanderiez-vous à la place? Je voudrais connaître l'alternative. Merci –

0

utiliser l'événement OnItemDataBound du répéteur

 void r_ItemDataBound(object sender, RepeaterItemEventArgs e) 
    { 
     if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 
     { 
      CustomControl ctl = (CutonControl)e.Item.FindControl("myControl"); 
     } 
    } 
Questions connexes