17. marts 2011 - 15:50
Der er
6 kommentarer
Repeater i en repeater
Hej alle sammen, Nu har jeg løbet ind i dette problem flere gange, da vil ikke har den funktion som man har i mysql: group_concat, så vil jeg gerne lære hvordan jeg kan lave en repeater i en repeater og få sat noget data ind i den fra codebehind filen? Da det er en problem stilling, som jeg tit løber ind i og det har irriteret mig længe.
Annonceindlæg fra Hitachi
”Forskellighed gør os stærkere!”
Diversitet er ikke kun buzzwords og politisk korrekthed, men et spørgsmål om at alle føler sig godt tilpas og kan yde deres bedste.
31. januar 2025
17. marts 2011 - 16:19
#1
Et eksempel fra lageret med en nested repeater: <%@ import namespace="System.Collections.Generic" %> <html> <head> <script language="C#" runat="server"> public class PData { private int group; private List<CData> lst; public PData(int group) { this.group = group; this.lst = new List<CData>(); } public int Group { get { return group; } } public List<CData> Lst { get { return lst; } } } public class CData { private string name; public CData(string name) { this.name = name; } public string Name { get { return name; } } } void Page_Load(Object sender, EventArgs e) { List<PData> lst = new List<PData>(); PData p1 = new PData(1); p1.Lst.Add(new CData("A")); p1.Lst.Add(new CData("B")); lst.Add(p1); PData p2 = new PData(2); p2.Lst.Add(new CData("C")); p2.Lst.Add(new CData("D")); p2.Lst.Add(new CData("E")); lst.Add(p2); PData p3 = new PData(3); p3.Lst.Add(new CData("F")); lst.Add(p3); prep.DataSource = lst; prep.DataBind(); } </script> </head> <body> <form runat=server> <ul> <asp:Repeater id="prep" runat="server"> <ItemTemplate> <li>Group: <%# DataBinder.Eval(Container.DataItem, "Group") %></li> <ul> <asp:Repeater id="crep" datasource='<%# DataBinder.Eval(Container.DataItem, "Lst") %>' runat="server"> <ItemTemplate> <li>Name: <%# DataBinder.Eval(Container.DataItem, "Name") %></li> </ItemTemplate> </asp:Repeater> </ul> </ItemTemplate> </asp:Repeater> </ul> </form> </body> </html>
17. marts 2011 - 18:31
#2
ASPX: <asp:Repeater id="rpKursus" runat="server" OnItemDataBound="rpKursus_ItemDataBound"> <ItemTemplate> <h3><%# Eval("KursusNavn") %></h3> <asp:Repeater id="rpDeltager" runat="server"> <ItemTemplate> <%# Eval("DeltagerNavn") %><br /> </ItemTemplate> </asp:Repeater> </ItemTemplate> </asp:Repeater> CodeBehind: public void rpKursus_ItemDataBound(object sender, RepeaterItemEventArgs e) { RepeaterItem item = e.Item; if ((item.ItemType == ListItemType.Item) || (item.ItemType == ListItemType.AlternatingItem)) { Repeater rpDeltager = (Repeater)item.FindControl("rpDeltager"); Kursus kursus = (Kursus)item.DataItem; List<Deltager> deltagere = GetDeltagere(kursus); rpDeltager.DataSource = deltagere; rpDeltager.DataBind(); } }
18. marts 2011 - 10:27
#5
Hvis det er mit indlæg du ønsker uddybet: OnItemDataBound event'en kaldes hver gang et item i repeater "tegnes" item.DataItem giver det item der er ved at blive "tegnet". item.FindControl("rpDeltager") returnere nr 2 repeater.