Другое решение состоит в том, чтобы просто использовать два повторителя, один из которых вложен в другой. Вы можете передать свои группы с дочерними записями первому повторителю, а на ItemDataBound повторителя групп передать дочерние записи дочернему повторителю и вызвать там DataBind().
Это больше кода, но на самом деле дает вам больше контроля над макетом без кода создания HTML в вашем коде.
Как вы можете видеть здесь, у нас есть родительский повторитель, и в шаблоне элемента мы можем настроить каждую группу по своему усмотрению. В ChildRepeater у нас есть шаблон элемента, в котором мы можем настроить каждый элемент внутри группы. Очень чистый и все с декларативным пользовательским интерфейсом.
<asp:Repeater runat="server" id="GroupRepeater">
<ItemTemplate>
<asp:Literal runat="server" id="HeaderText" />
<asp:Repeater runat="server id="ChildRepeater">
<ItemTemplate>
<asp:Literal runat="server" id="InfoGoesHere" />
</ItemTemplate>
</asp:Repeater>
</ItemTemplate>
</asp:Repeater>
В коде позади у нас может быть что-то вроде этого:
private void GroupRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
//Get the child records, this can be any data structure you want
SomeChildCollection children = ((SomeGroupCollection)e.Item.DataItem).Children;
//Find the child repeater
Repeater childRepeater = e.Item.FindControl("ChildRepeater") as Repeater;
childRepeater.ItemDataBound += SomeMethod;
childRepeater.DataSource = children;
childRepeater.DataBind();
}
После привязки каждого дочернего элемента вы можете подписаться на событие ItemDataBound и выполнить привязку дочернего элемента к элементам управления по своему усмотрению.
person
Ray Booysen
schedule
04.02.2009