사용 하 여 계층적 데이터를 표시 하는 방법에 중첩 된 Repeater 컨트롤과.NET C#


이 문서의 Microsoft Visual Basic.NET 버전을 참조 하십시오.
326338 .

이 문서에서는 다음 Microsoft.NET Framework 클래스 라이브러리 네임 스페이스:
  • System.Data
  • System.Data.SqlClient

이 작업에서는

요약

중첩 된 Repeater 컨트롤을 사용 하 여 계층적 데이터를 표시 하는 방법을 설명 합니다. 이 개념은 다른 목록 바운드 컨트롤에 적용할 수 있습니다.

맨 위로

부모 테이블에 바인딩

  1. Microsoft Visual Studio.NET을 시작 합니다.
  2. 파일 메뉴에서 새로 만들기를 가리키고 프로젝트를 클릭 합니다.
  3. 프로젝트 형식 Visual C# 프로젝트 를 클릭 하 고 누른 다음 템플릿에서 ASP.NET 웹 응용 프로그램 입니다.
  4. 위치 상자에 웹 응용 프로그램#를 삭제 하 고 NestedRepeater를 입력 합니다. 로컬 서버를 사용 하는 경우에 http://localhost로 서버 이름을 둡니다. 다음 경로가 위치 상자에 나타납니다.
    http://localhost/ NestedRepeater
    확인을 클릭합니다.
  5. 솔루션 탐색기 NestedRepeater 프로젝트 이름 노드를 마우스 오른쪽 단추로 클릭 하 고 추가를 가리킨 다음 Web Form 추가클릭 합니다.
  6. Web Form의 이름을 입력합니다
    NestedRepeater 열기를 클릭 합니다.
  7. 새 Web Form은 만들어집니다. Microsoft Visual Studio.NET 통합 개발 환경 (IDE)에서 디자인 보기에서 엽니다. 도구 상자에서 Repeater 컨트롤을 선택 하 고 Web Form 페이지를 끕니다.
  8. Repeater 컨트롤의 ID 속성을 parentRepeater로 변경 합니다.
  9. 이 Web Form에 대 한 HTML 보기로 전환 합니다. 이렇게 하려면 디자이너의 왼쪽 아래 모서리에 있는 HTML 탭을 클릭 합니다. Repeater 컨트롤에서는 다음과 같은 HTML 코드가 생성 됩니다.
    <asp:Repeater id="parentRepeater" runat="server"></asp:Repeater>
  10. 반복 태그에 다음 코드를 추가 합니다.
    <itemtemplate>     <b><%# DataBinder.Eval(Container.DataItem, "au_id") %></b><br>
    </itemtemplate>

    복사를 하 고 나면 반복 에 대 한 HTML 코드는 다음과 같습니다.
    <asp:Repeater id="parentRepeater" runat="server"><itemtemplate>
    <b><%# DataBinder.Eval(Container.DataItem, "au_id") %></b><br>
    </itemtemplate>
    </asp:Repeater>

  11. 솔루션 탐색기에서 NestedRepeater.aspx마우스 오른쪽 단추로 클릭 한 다음 NestedRepeater.aspx.cs 코드 숨김 파일로 전환 하 여 코드 보기 클릭 합니다.
  12. 파일의 맨 위에 다음 네임 스페이스 선언을 추가 합니다.
    using System.Data;using System.Data.SqlClient;

  13. Pubs 데이터베이스에 대 한 연결을 만들려면 Page_Load 이벤트에 다음 코드를 추가 합니다. 다음 Authors 테이블 Repeater 컨트롤을 바인딩할 수 있습니다.
          public void Page_Load(object sender, EventArgs e)      {
    //Create the connection and DataAdapter for the Authors table.
    SqlConnection cnn = new SqlConnection("server=(local);database=pubs; Integrated Security=SSPI");
    SqlDataAdapter cmd1 = new SqlDataAdapter("select * from authors",cnn);

    //Create and fill the DataSet.
    DataSet ds = new DataSet();
    cmd1.Fill(ds,"authors");
    //Insert code in step 4 of the next section here.
    //Bind the Authors table to the parent Repeater control, and call DataBind.
    parentRepeater.DataSource = ds.Tables["authors"];
    Page.DataBind();

    //Close the connection.
    cnn.Close();
    }

    참고: 사용자 환경에 맞게 데이터베이스 연결 문자열을 수정 해야 할 수 있습니다.

  14. 모든 파일을 저장 합니다.
  15. 솔루션 탐색기NestedRepeater.aspx를 마우스 오른쪽 단추로 클릭 한 다음 시작 페이지로 설정을 클릭 합니다.
  16. 빌드 메뉴에서 프로젝트 컴파일하려면 솔루션 빌드 클릭 합니다.
  17. 브라우저에서.aspx 페이지를 검토 한 다음 페이지가 지금까지 작동 하는지 확인 합니다.

    출력은 다음과 같이 나타나야 합니다.
    • 172-32-1176
    • 213-46-8915
    • 238-95-7766
    • 267-41-2394
    • ...
맨 위로

자식 테이블에 바인딩

  1. NestedRepeater.aspx 페이지의 HTML 뷰에서 코드의 다음 줄을 찾습니다.
    <b><%# DataBinder.Eval(Container.DataItem, "au_id") %></b><br>
    이 코드 뒤에 다음 코드를 추가:
    <asp:repeater id="childRepeater" runat="server"><itemtemplate>
    <%# DataBinder.Eval(Container.DataItem, "[\"title_id\"]")%><br>
    </itemtemplate>
    </asp:repeater>

    이 새로운 코드는 Repeater 컨트롤을 두 번째 부모 Repeater 컨트롤의 ItemTemplate 속성을 추가합니다.
  2. Repeater 컨트롤의 자식에 대 한 DataSource 속성이 다음과 같이 설정.
    <asp:repeater ... datasource='<%# ((DataRowView)Container.DataItem)      .Row.GetChildRows("myrelation") %>' >

    Repeater 컨트롤의 자식에 대 한 DataSource 속성을 설정한 다음 (상위 및 하위) 두 Repeater 컨트롤에 대 한 HTML 코드는 다음과 같이 나타납니다.
    <asp:Repeater id="parentRepeater" runat="server"><itemtemplate>
    <b>
    <%# DataBinder.Eval(Container.DataItem, "au_id") %>
    </b>
    <br>
    <asp:repeater id="childRepeater" runat="server"
    datasource='<%# ((DataRowView)Container.DataItem)
    .Row.GetChildRows("myrelation") %>' >
    <itemtemplate>
    <%# DataBinder.Eval(Container.DataItem, "[\"title_id\"]")%><br>
    </itemtemplate>
    </asp:Repeater>
    </itemtemplate>
    </asp:Repeater>

  3. 페이지의 맨 위에 다음과 같은 페이지 지시문을 추가 합니다.
    <%@ Import Namespace="System.Data" %>
  4. 코드 숨김 페이지의 Page_Load 이벤트에서 다음 줄을 대체
    //Insert code in step 4 of the next section here.
    다음 코드로:
             //Create a second DataAdapter for the Titles table.         SqlDataAdapter cmd2 = new SqlDataAdapter("select * from titleauthor",cnn);
    cmd2.Fill(ds,"titles");

    //Create the relation between the Authors and Titles tables.
    ds.Relations.Add("myrelation",
    ds.Tables["authors"].Columns["au_id"],
    ds.Tables["titles"].Columns["au_id"]);


    Titles 테이블을 데이터 집합추가 하 고 Authors 테이블과 Titles 테이블 간의 관계를 추가 합니다.
  5. 저장 하 고 응용 프로그램을 컴파일하십시오.
  6. 브라우저에서 페이지를 볼 하 고 페이지가 지금까지 작동 하는지 확인 합니다. 출력은 다음과 같이 나타나야 합니다.
    172-32-1176
    PS3333
    213-46-8915
    BU1032
    BU2075
    238-95-7766
    PC1035
    267-41-2394
    BU1111
    TC7777
    ...
맨 위로

전체 코드 목록

Nestedrepeater.aspx

<%@ Page language="c#" Codebehind="NestedRepeater.aspx.cs" AutoEventWireup="false" Inherits="NestedRepeater.NestedRepeater" %><%@ Import Namespace="System.Data" %>

<html>
<body>
<form runat=server>

<!-- start parent repeater -->
<asp:repeater id="parentRepeater" runat="server">
<itemtemplate>
<b><%# DataBinder.Eval(Container.DataItem,"au_id") %></b><br>

<!-- start child repeater -->
<asp:repeater id="childRepeater" datasource='<%# ((DataRowView)Container.DataItem)
.Row.GetChildRows("myrelation") %>' runat="server">

<itemtemplate>
<%# DataBinder.Eval(Container.DataItem, "[\"title_id\"]")%><br>
</itemtemplate>
</asp:repeater>
<!-- end child repeater -->

</itemtemplate>
</asp:repeater>
<!-- end parent repeater -->

</form>
</body>
</html>

Nestedrepeater.aspx.cs

using System;using System.Data;
using System.Data.SqlClient;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace NestedRepeater
{
public class NestedRepeater : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Repeater parentRepeater;
public NestedRepeater()
{
Page.Init += new System.EventHandler(Page_Init);
}
public void Page_Load(object sender, EventArgs e)
{
//Create the connection and DataAdapter for the Authors table.
SqlConnection cnn = new SqlConnection("server=(local);database=pubs; Integrated Security=SSPI ;");
SqlDataAdapter cmd1 = new SqlDataAdapter("select * from authors",cnn);

//Create and fill the DataSet.
DataSet ds = new DataSet();
cmd1.Fill(ds,"authors");

//Create a second DataAdapter for the Titles table.
SqlDataAdapter cmd2 = new SqlDataAdapter("select * from titleauthor",cnn);
cmd2.Fill(ds,"titles");

//Create the relation bewtween the Authors and Titles tables.
ds.Relations.Add("myrelation",
ds.Tables["authors"].Columns["au_id"],
ds.Tables["titles"].Columns["au_id"]);

//Bind the Authors table to the parent Repeater control, and call DataBind.
parentRepeater.DataSource = ds.Tables["authors"];
Page.DataBind();

//Close the connection.
cnn.Close();
}
private void Page_Init(object sender, EventArgs e)
{
InitializeComponent();
}
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);
}
}
}

맨 위로

참조

자세한 내용은 Microsoft.NET Framework 소프트웨어 개발 키트 (SDK)에서 다음 항목을 참조 하십시오.맨 위로
속성

문서 ID: 306154 - 마지막 검토: 2017. 2. 6. - 수정: 1

Microsoft ASP.NET 1.0, Microsoft ASP.NET 1.1, Microsoft Visual C# .NET 2002 Standard Edition, Microsoft Visual C# .NET 2003 Standard Edition

피드백