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 Computerworld it-jobbank
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.