Search code examples
asp.netdata-bindingrepeaternested-repeater

Nested Repeater HeaderTemplate issue


Hello i am using nested repeaters (3 levels) and wanted to add header to a second level repeater, so I could assign title for item group. The issue is, when I add header template to second level repeater, my code behind can't find third level repeater. Even if header template is empty the issue still persists. Does anyone have any suggestions?

<asp:Repeater runat="server" ID="rpt2nd" OnItemDataBound="rpt2nd_OnDataBound">
  <HeaderTemplate></HeaderTemplate>
    <ItemTemplate>
       <asp:Repeater runat="server" ID="rpt3rd">
         <ItemTemplate></ItemTemplate>
       </asp:Repeater>
   </ItemTemplate>
</asp:Repeater>

protected void rpt2nd_OnDataBound(object sender, RepeaterItemEventArgs e)
{
  var rpt3rd= ((Repeater)e.Item.FindControl("rpt3rd"));
  rpt3rd.DataSource = ((KeyValuePair<int, IEnumerable<CustomClass>>)e.Item.DataItem).Value;
  rpt3rd.DataBind();
}

Solution

  • You need to add if(e.Item.ItemType != ListItemType.Item && e.Item.ItemType != ListItemType.AlternatingItem) return; to the top of the rpt2nd_OnDataBound (also, it should be renamed to rpt2nd_OnItemDataBound to avoid confusion).