Vnořit Repeatery se může zdát potíž, dokud poprvé neuvidíte, jak je to jednoduché. Celý fígl totiž spočívá v data-bindingu vnitřních repeaterů v obsluze události ItemDataBound vnějšího Repeateru.
V příkladu vnější Repeater iteruje přes všechny obory činnosti (kategorie, skupiny) a vnitřní Repeater zobrazuje položky (zde „zápisy do katalogu“) příslušející danému oboru činnosti (kategorii, skupině).
MyPage.aspx
<asp:Repeater ID="OboryCinnostiRepeater" runat="server"> <ItemTemplate> <%# ((OborCinnosti)Container.DataItem).Nazev %> <asp:Repeater ID="ZapisyRepeater" runat="server"> <ItemTemplate> <%# ((ZapisDoKatalogu)Container.DataItem).Jmeno %> </ItemTemplate> </asp:Repeater> </ItemTemplate> </asp:Repeater>
MyPage.aspx.cs
private void OboryCinnostiRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e) { RepeaterItem item = e.Item; // zajímají nás jen datové řádky, ne hlavička ani patička if ((item.ItemType == ListItemType.Item) || (item.ItemType == ListItemType.AlternatingItem)) { // najdeme si vnitřní Repeater Repeater zapisyRepeater = (Repeater)item.FindControl("ZapisyRepeater"); // a nabidnujeme mu data příslušející položce (oboru) OborCinnosti obor = (OborCinnosti)item.DataItem; ZapisDoKataloguCollection = obor.GetZapisy(); zapisyRepeater.DataSource = zapisyOboru; zapisyRepeater.DataBind(); } }