2009-04-08 7 views
1

Est-il possible de définir plusieurs modèles pour ItemTemplate d'un répéteur et de basculer entre eux selon certaines conditions?Commutation du ItemTemplate d'un répéteur à l'exécution

-je utiliser un répéteur pour afficher la liste des messages mais qui veulent avoir une vue différente pour les lignes qui appartiennent à l'utilisateur actuel (par exemple, contient un LinkButton pour la suppression du poste)

Si cela est impossible, Est-il possible d'utiliser un contrôle Multiview à l'intérieur du ItemTemplate d'un répéteur?

Répondre

2

J'ai essayé d'utiliser un contrôle MultiView à l'intérieur du ItemTemplate et cela a fonctionné très bien, espérons que cela aide quelqu'un avec le même problème:

<asp:Repeater ID="Repeater1" runat="server" OnItemCommand="Repeater1_ItemCommand"> 
    <ItemTemplate> 
    <asp:MultiView ID="MultiView1" runat="server" ActiveViewIndex="<%# ((Post)Container.DataItem).Member.ID == CurrentMemberID ? 1 : 0 %>"> 
     <asp:View ID="View1" runat="server"><!-- some links --></asp:View> 
     <asp:View ID="View2" runat="server"><asp:LinkButton CommandName="DeletePost" CommandArgument="<%# ((Post)Container.DataItem).Id %>" ID="LinkButton1" runat="server">Delete Post</asp:LinkButton></asp:View> 
    </asp:MultiView> 
    </ItemTemplate> 
</asp:Repeater> 
0

Je ne sais pas s'il est possible de basculer entre les modèles, mais j'ai trouvé l'événement Repeater.OnItemDataBound le plus utile pour modifier l'affichage des éléments de répéteur individuels.

Par exemple, pour afficher un bouton de lien basé sur l'utilisateur en cours ...

protected void repeater_ItemDataBound(object sender, RepeaterItemEventArgs e) 
{ 
    LinkButton = e.Item.FindControl("btnDelete"); 
    LinkButton.Visible = (e.Item.DataItem as DataRow)["CreatedBy"] == getCurrentUser(); 
} 

En général, je continue la mise en page des données cohérentes pour chaque élément de répéteur et modifier l'aspect visuel en modifiant la cssStyle et Propriétés visibles des contrôles dans le modèle. S'il y a des changements de mise en page plus radicaux, je vais mettre chaque option de mise en page à l'intérieur d'un espace réservé et utiliser la logique pour déterminer l'espace réservé à afficher.

Questions connexes