Tag Archives: Nested

ASP.NET 2.0에서 중첩 Repeater 사용하기

ASP.NET 2.0에서는 리스트형의 데이터를 출력하기 위한 방법으로 여러가지 멋진 혹은 쓸데없는;; 여러 컨트롤을 제공한다.

게시판등에서 리스트를 출력하기 위해 Repeater 컨트롤을 사용하였는데 댓글의 댓글과 같은 리스트안에서 리스트 각각에 해당하는 리스트를 또다시 출력하고 싶을 경우 어떻게 해야 하는지 고민하게 되었다.

이와 같은 고민은 구글신께 “Nested Repeater“라는 단어로 검색해 보면 답이 나오지만 정리를 위해 적어보겠다.

[code]<asp:Repeater ID=”Parent” runat=”server” OnItemDataBound=”Parent_ItemDataBound”>
    <ItemTemplate>
    <p><%# Eval(“IDX”) %></p>
    <asp:Repeater ID=”Child” runat=”server”>
        …
    </asp:Repeater>
    </ItemTemplate>
</asp:Repeater>[/code]
[code]protected void Parent_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    Repeater nestedRepeater = (Repeater) e.Item.FindControl(“Child”);

    if (nestedRepeater != null)
    {
        int Idx = (int) DataBinder.Eval(e.Item.DataItem, “IDX”);
        nestedRepeater.DataSource = new CommentService().GetCommentsByContentIdx(Idx);
        nestedRepeater.DataBind();
    }
}[/code]

Repeater의 OnItemDataBound 속성을 사용하여 매 데이터를 불러올때마다 함수를 호출하게 된다.

FindControl를 이용하여 Repeater 내부의 Child라는 ID를 가진 자식 Repeater를 가져와서 필요한 처리를 해주면 된다.