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();
}
}