또 다른 솔루션은 두 개의 중계기를 하나씩 중첩시키는 것입니다. 하위 레코드가있는 그룹을 첫 번째 repeater로 전달하고 그룹 repeater의 ItemDataBound에 하위 레코드를 하위 repeater로 전달하고 DataBind()를 호출 할 수 있습니다.
이 코드는 더 많은 코드이지만 실제로 코드 숨김에 HTML 작성 코드가 없어도 레이아웃을 제어 할 수 있습니다.
여기에서 볼 수 있듯이 우리는 부모 리피터를 가지고 있으며 항목 템플릿에 각 그룹을 사용자 정의 할 수 있습니다.ChildRepeater에는 그룹화 된 각 항목을 사용자 정의 할 수있는 항목 템플릿이 있습니다. 매우 깨끗하고 선언적 UI가 모두 있습니다. 코드에서
<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 이벤트를 구독 할 수 있습니다 각 어린이 바인딩 후를 당신이 맞는 볼 컨트롤에 바인딩 아이를 않습니다.
건배, 그게 내가 원하는거야. – ctrlalt3nd
그 기사는 더 이상 작동하지 않습니다. – NotMe