2009-04-08 12 views
1

Ist es möglich mehrere Vorlagen für das ItemTemplate eines Repeaters zu definieren und zwischen diesen zu wechseln?Repeaters ItemTemplate zur Laufzeit umschalten

Ich benutze einen Repeater eine Liste der Beiträge zu betrachten, sondern eine andere Ansicht für Reihen haben will, die den aktuellen Benutzer gehören (zB eine Linkbutton enthält den Beitrag zum Löschen)

Wenn dies nicht möglich ist, dann Ist es möglich, ein Multiview-Steuerelement in der ItemTemplate eines Repeaters zu verwenden?

Antwort

2

Ich versuchte, eine Multiview-Kontrolle in der ItemTemplate zu bedienen und es funktionierte sehr gut, hofft, dass dies jemand mit dem gleichen Problem hilft:

<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

Ich weiß nicht, ob es möglich ist, zwischen Vorlagen zu wechseln, aber ich habe das Repeater.OnItemDataBound Ereignis am nützlichsten gefunden, um die Anzeige einzelner Repeater-Elemente zu ändern.

zum Beispiel einer Link-Taste auf der Basis der aktuellen Benutzer zu zeigen ...

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

Generell halte ich das Layout der Daten für jeden Repeater Punkt konsistent und ändern das visuelle Erscheinungsbild durch die cssStyle zu verändern und Sichtbare Eigenschaften von Steuerelementen in der Vorlage Wenn es radikalere Layoutänderungen gibt, lege ich jede Layoutoption in einen Platzhalter und verwende Logik, um zu bestimmen, welcher Platzhalter angezeigt werden soll.