2011-10-28 2 views
0

Scénario:Comment ajouter des contrôles utilisateur Web pour répéteur

  • UsrControl: contrôle utilisateur personnalisé, qui contient une zone de texte et un bouton, rederend horizontalement (une seule ligne).

  • UsrControlContainer:. Contrôle utilisateur personnalisé, qui devrait être en mesure d'afficher plusieurs objets UsrControl (chaque objet en ligne séparée, de sorte que le modèle Seperator sera probablement <br /> Cette commande contient également un bouton, ce qui ajoute une nouvelle UsrControl à la collection .

Mon code:

<asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click"/> 
<asp:Repeater ID="rptExample" runat="server"> 
    <ItemTemplate> 

    </ItemTemplate> 
    <SeparatorTemplate><br /></SeparatorTemplate> 
</asp:Repeater> 

Et:

protected void Button1_Click(object sender, EventArgs e) 
{ 
    rptExample.DataSource = new List<UsrControl> {new UsrControl(), new UsrControl()}; 
    rptExample.DataBind(); 
} 

Simple question - que dois-je mettre en ItemTemplate pour faire ce travail? Editer - Je veux également passer certains paramètres à UsrControl avant de le rendre.

Répondre

2
<asp:Repeater ID="rptExample" runat="server"> 
    <ItemTemplate> 
      <uc:UsrControl runat="server" /> 
    </ItemTemplate> 
    <SeparatorTemplate><br /></SeparatorTemplate> 
</asp:Repeater> 

protected void Button1_Click(object sender, EventArgs e) 
{ 
    rptExample.DataSource = Enumerable.Range(0, 2); 
    rptExample.DataBind(); 
} 
+0

Cela fonctionne, merci :) Mais si je veux passer des paramètres à UsrControl? – sventevit

1

Suite à votre question en réponse. Vous pouvez capturer chaque objet de liaison dans l'événement ItemDataBound. Donc, par exemple, comme je l'ai utilisé, définissez l'objet entier en tant que propriété de contrôle utilisateur.

protected void PersonesRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e) 
{ 
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 
    { 
     PersonLine line = (PersonLine)e.Item.FindControl("Person1"); 
     line.Person = e.Item.DataItem as Osoba; 
    } 
} 

Ofcourse, vous devez ajouter le gestionnaire d'événements à votre répéteur:

<asp:Repeater runat="server" ID="PersonesRepeater" OnItemDataBound="PersonesRepeater_ItemDataBound"><ItemTemplate> 
     <my:Person ID="Person1" runat="server" /> 
    </ItemTemplate> 
</asp:Repeater> 
Questions connexes