Avatar billede Freelanze Nybegynder
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.
Avatar billede arne_v Ekspert
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>
Avatar billede pomfrit Nybegynder
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();
    }
}
Avatar billede Freelanze Nybegynder
18. marts 2011 - 08:53 #3
har du en mere indeep beskrivelse af det? mange tak ;)
Avatar billede Freelanze Nybegynder
18. marts 2011 - 10:17 #4
altså link eller sådan noget ;)
Avatar billede pomfrit Nybegynder
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.
Avatar billede arne_v Ekspert
15. april 2011 - 01:54 #6
Eksemplet er vel stort set saa simpelt som det kan laves.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester