Search code examples
asp.netrepeaternested-repeater

Repeater in Repeater


I have a repeater inside a repeater. Where the parent repeater is bound to a Datatble which has a column with a Datatable in it.

I would like to bind the child repeater to the datatable column in the parent repeater's datarow

Is this possible? i was thinking i could do this directly in the aspx file like:

DataSource="<%# DataBinder.Eval(Container.DataItem, "Products")%>" but it doesn't seem to work.


Solution

  • In the parent repeater, attach a method to the OnItemDataBound event and in the method, find the nested repeater and data bind it.

    Example (.aspx):

    <asp:Repeater ID="ParentRepeater" runat="server" OnItemDataBound="ItemBound">
        <ItemTemplate>
            <!-- Repeated data -->
            <asp:Repeater ID="ChildRepeater" runat="server">
                <ItemTemplate>
                    <!-- Nested repeated data -->
                </ItemTemplate>
            </asp:Repeater>
        </ItemTemplate>
    </asp:Repeater>
    

    Example (.cs):

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            ParentRepeater.DataSource = ...;
            ParentRepeater.DataBind();
        }
    }
    
    protected void ItemBound(object sender, RepeaterItemEventArgs args)
    {
        if (args.Item.ItemType == ListItemType.Item || args.Item.ItemType == ListItemType.AlternatingItem)
        {
            Repeater childRepeater = (Repeater)args.Item.FindControl("ChildRepeater");
            childRepeater.DataSource = ...;
            childRepeater.DataBind();
        }
    }