연습: TreeView 컨트롤에 계층 데이터 표시
업데이트: 2007년 11월
ASP.NET TreeView 컨트롤은 사용자에게 데이터를 계층 구조로 제공하도록 설계되었습니다. 사용자는 자식 노드가 포함된 개별 노드를 열 수 있습니다. TreeView 컨트롤은 XML 데이터를 표시하는 데 적합하지만 계층으로 표시할 수 있는 모든 데이터에 사용될 수 있습니다. 이 연습에서는 TreeView 컨트롤 사용에 대한 기본 사항과 계층 데이터를 표시하는 다양한 방법을 보여 줍니다.
이 연습에서 수행할 작업은 다음과 같습니다.
사전 요구 사항
이 연습을 따라 하려면 다음과 같은 요건을 갖추어야 합니다.
Microsoft Visual Web Developer(Visual Studio)
MDAC(Microsoft Data Access Components) 버전 2.7 이상
Microsoft Windows XP나 Windows Server 2003을 사용하고 있는 경우 MDAC 2.7이 이미 설치되어 있습니다. 그러나 Microsoft Windows 2000을 사용하는 경우 컴퓨터에 이미 설치된 MDAC를 업그레이드해야 할 수도 있습니다. 자세한 내용은 MSDN Library에서 "Microsoft Data Access Components (MDAC) Installation"을 참조하십시오.
SQL Server Northwind 데이터베이스에 대한 액세스 권한 SQL Server 샘플 Northwind 데이터베이스를 다운로드 및 설치하는 방법에 대한 자세한 내용은 Microsoft SQL Server 웹 사이트의 예제 데이터베이스 설치를 참조하십시오.
참고: SQL Server가 실행되는 컴퓨터에 로그온하는 방법에 대한 자세한 내용은 서버 관리자에게 문의하십시오.
SQL Server 데이터베이스가 웹 서버와 같은 컴퓨터에 없는 경우 Northwind 데이터베이스에 대한 액세스 권한이 있는 SQL Server 계정의 사용자 이름 및 암호
웹 사이트 만들기
다음 단계에 따라 새 웹 사이트와 페이지를 만듭니다.
파일 시스템 웹 사이트를 만들려면
Visual Web Developer를 엽니다.
파일 메뉴에서 새로 만들기를 클릭한 다음 웹 사이트를 클릭합니다. Visual Web Developer Express를 사용하는 경우 파일 메뉴에서 새웹 사이트를 클릭합니다.
새 웹 사이트 대화 상자가 나타납니다.
Visual Studio에 설치되어 있는 템플릿에서 ASP.NET 웹 사이트를 클릭합니다.
위치 상자에서 파일 시스템을 선택하고 웹 사이트의 페이지를 보관할 폴더의 이름을 입력합니다.
예를 들어, 폴더 이름 C:\WebSites\HierarchicalData를 입력합니다.
언어 목록에서 작업할 프로그래밍 언어를 클릭합니다.
확인을 클릭합니다.
Visual Web Developer에서 해당 폴더와 Default.aspx라는 새 페이지를 만듭니다.
데이터용 XML 파일 만들기
다음 단계에 따라 새 XML 파일을 만듭니다.
XML 파일을 만들려면
솔루션 탐색기에서 웹 사이트를 마우스 오른쪽 단추로 클릭한 다음 새 항목 추가를 클릭합니다.
새 항목 추가 대화 상자의 표준템플릿 아래에서 XML 파일을 클릭합니다.
이름 상자에 Bookstore.xml을 입력한 다음 추가를 클릭합니다.
Visual Web Developer에서 새 Bookstore.xml 파일을 만들고 코드 편집기를 엽니다.
다음 XML 데이터를 복사한 후 Bookstore.xml 파일에 붙여넣어 파일의 기존 내용을 덮어씁니다.
<?xml version="1.0" standalone="yes"?> <bookstore> <genre name="fiction"> <book ISBN="10-000000-001"> <title>The Iliad and The Odyssey</title> <price>12.95</price> <comments> <userComment rating="4"> Best translation I've read. </userComment> <userComment rating="2"> I like other versions better. </userComment> </comments> </book> <book ISBN="10-000000-999"> <title>Anthology of World Literature</title> <price>24.95</price> <comments> <userComment rating="3"> Needs more modern literature. </userComment> <userComment rating="4"> Excellent overview of world literature. </userComment> </comments> </book> </genre> <genre name="nonfiction"> <book ISBN="11-000000-002"> <title>Computer Dictionary</title> <price>24.95</price> <comments> <userComment rating="3">A valuable resource.</userComment> </comments> </book> <book ISBN="11-000000-003"> <title>Cooking on a Budget</title> <price>23.95</price> <comments> <userComment rating="4">Delicious!</userComment> </comments> </book> </genre> </bookstore>
XML 파일에 온라인 서점에서 구입할 수 있는 책에 대한 정보가 포함됩니다.
Bookstore.xml 파일을 저장한 다음 닫습니다.
TreeView 컨트롤에 XML 데이터 표시
이 단원에서는 TreeView 컨트롤을 사용하여 XML 데이터를 표시합니다. 먼저 특별한 구성 없이 XML 정보를 표시할 수 있습니다.
XML 데이터를 표시하려면
Default.aspx 페이지를 열고 디자인 뷰로 전환합니다.
도구 상자의 탐색 그룹에서 TreeView 컨트롤을 페이지로 끌어 옵니다.
TreeView 컨트롤을 마우스 오른쪽 단추로 클릭한 다음 스마트 태그 표시를 클릭합니다.
TreeView 작업 메뉴의 데이터 소스 선택 드롭다운 목록에서 새 데이터 소스를 선택합니다. 데이터 소스 구성 마법사가 나타납니다.
응용 프로그램이 데이터를 가져오는 위치 창에서 XML 파일을 선택합니다. 데이터 소스의 기본 ID를 그대로 둡니다. 확인을 클릭합니다.
데이터 소스 구성 대화 상자의 데이터 파일 상자에 ~/Bookstore.xml을 입력한 다음 확인을 클릭합니다.
이제 페이지를 테스트할 수 있습니다.
페이지를 테스트하려면
Ctrl+F5를 눌러 페이지를 실행합니다.
컨트롤의 노드를 축소했다가 확장합니다.
기본적으로 Bookstore.xml 파일에 있는 요소의 태그 이름만 노드에 표시됩니다.
각 노드에 대해 표시할 XML 파일의 정보를 지정할 수 있게 해주는 사용자 지정 바인딩을 만들어 TreeView 컨트롤에 표시되는 정보를 사용자 지정할 수 있습니다.
사용자 지정 바인딩을 만들려면
Default.aspx 페이지에서 TreeView 컨트롤을 마우스 오른쪽 단추로 클릭한 다음 스마트 태그 표시를 클릭합니다.
TreeView 작업 메뉴에서 TreeNode 데이터 바인딩 편집을 클릭합니다.
TreeView 데이터 바인딩 편집기 대화 상자가 나타납니다.
데이터 바인딩을 정의할 것이므로 데이터 바인딩 자동 생성 확인란의 선택을 취소합니다.
추가를 클릭하여 새 바인딩을 만든 다음 데이터 바인딩 속성에서 DataMember를 서점으로, Text를 책 정보로 설정합니다.
서점 노드는 .xml 파일에서 최상위 노드이며 TreeView 컨트롤에 한 번만 나타나므로 정적 값을 표시하도록 바인딩을 구성 중입니다.
추가를 클릭하여 두 번째 바인딩을 만든 다음 데이터 바인딩 속성에서 DataMember를 쟝르로, TextField를 이름으로 설정합니다.
이렇게 하면 해당 노드에서 .xml 파일의 <genre> 요소를 읽고 name 특성을 TextField 속성에 할당합니다.
추가를 클릭하여 책에 대한 세 번째 바인딩을 만든 다음 데이터 바인딩 속성에서 DataMember를 책으로, TextField를 ISBN으로 설정합니다.
확인을 클릭합니다.
이제 페이지를 테스트할 수 있습니다.
페이지를 테스트하려면
Ctrl+F5를 눌러 페이지를 실행합니다.
이번에는 TreeView 컨트롤에 방금 정의한 바인딩에 해당하는 3개 수준이 표시됩니다. 3개 수준은 각각 책 정보라는 레이블이 지정된 루트 노드, 장르 그룹 및 ISBN 세부 정보입니다.
XML 파일에 있는 모든 요소에 대해 데이터 바인딩을 만들 수 있지만 요소 특성, 내부 텍스트, 요소 이름 또는 요소 값에만 바인딩할 수 있습니다. 중첩 요소에는 바인딩할 수 없습니다. 중첩 요소의 값을 표시하려면 해당 요소에 대한 별도의 바인딩을 만듭니다. 또는 내부 요소가 특성으로 변환되도록 XSLT를 사용하여 XML 파일을 변환할 수 있습니다. 자세한 내용과 예제는 XmlDataSource.TransformFile 속성을 참조하십시오.
TreeView 컨트롤에 관계형 데이터 표시
TreeView 컨트롤은 데이터 계층이 데이터베이스에 있는 경우처럼 논리적이고 XML 파일에 있는 경우처럼 물리적이지 않아도 모든 유형의 계층 데이터를 표시할 수 있습니다. 이 단원에서는 TreeView 컨트롤을 사용하여 Northwind 데이터베이스에 있는 관련 테이블의 데이터를 표시합니다.
먼저 Northwind 데이터베이스가 있는 SQL Server를 실행하는 컴퓨터에 대한 연결을 만듭니다.
SQL Server에 대한 연결을 만들려면
서버 탐색기에서 데이터 연결을 마우스 오른쪽 단추로 클릭한 다음 연결 추가를 클릭합니다. Visual Web Developer Express를 사용하는 경우 데이터베이스 탐색기를 사용합니다.
연결 추가 대화 상자가 나타납니다.
데이터 소스 목록에 **Microsoft SQL Server (SqlClient)**가 표시되지 않으면 변경을 클릭하고 데이터 소스 변경 대화 상자에서 Microsoft SQL Server를 선택합니다.
데이터 소스 선택 페이지가 나타나면 데이터 소스 목록에서 사용할 데이터 소스의 형식을 선택합니다. 이 연습에서 데이터 소스 형식은 Microsoft SQL Server입니다. 데이터 공급자 목록에서 .NET Framework Data Provider for SQL Server를 클릭한 다음 계속을 클릭합니다.
참고: Visual Web Developer에 서버 탐색기 탭이 표시되지 않으면 보기 메뉴에서 서버 탐색기를 클릭합니다. 데이터베이스 탐색기 탭이 표시되지 않으면 보기 메뉴에서 데이터베이스 탐색기를 클릭합니다.
연결 추가 상자의 서버 이름 상자에 서버 이름을 입력합니다.
서버에 로그온 섹션에서 실행 중인 SQL Server 데이터베이스에 액세스하는 데 적합한 옵션(통합 보안 또는 특정 ID와 암호)을 선택하고 필요한 경우 사용자 이름과 암호를 입력합니다.
암호 저장 확인란을 선택합니다.
참고: 프로덕션 응용 프로그램에서는 암호 저장을 사용하지 마십시오. 이 옵션을 사용하면 응용 프로그램 파일에 사용자 이름과 암호가 포함됩니다.
데이터베이스 이름 선택 또는 입력에 Northwind를 입력합니다.
연결 테스트를 클릭하고 제대로 작동하는지 확인한 다음 확인을 클릭합니다.
서버 탐색기(또는 데이터베이스 탐색기)의 데이터 연결 아래에 새 연결이 생성되었습니다.
데이터베이스 데이터를 표시하기 위한 TreeView 컨트롤 구성
이 단원에서는 동적으로 노드에 데이터를 채웁니다. 첫 번째 수준 노드는 마스터 데이터(이 경우, 범주)를 나타냅니다. 사용자가 노드를 클릭하면 해당 범주의 제품을 검색하는 데이터베이스 쿼리를 만들어 이 범주의 자식 노드가 생성됩니다. 데이터를 검색하려면 데이터 소스 컨트롤을 사용할 수 있습니다. 그러나 이 연습에서는 프로그래밍 방식으로 쿼리를 만들고 실행합니다.
먼저 새 페이지와 새 TreeView 컨트롤을 만듭니다.
새 페이지와 TreeView 컨트롤을 만들려면
TreeViewDynamic.aspx라는 ASP.NET 웹 페이지(Web Form 페이지)를 웹 사이트에 추가합니다.
TreeViewDynamic.aspx 페이지를 열고 디자인 뷰로 전환한 다음 Toolbox의 표준 그룹에서 Label 컨트롤을 페이지로 끌어 오고 이름을 labelStatus로 지정합니다.
labelStatus 컨트롤은 오류 보고 용도로만 사용됩니다.
도구 상자의 탐색 그룹에서 TreeView 컨트롤을 페이지로 끌어 옵니다.
TreeView 컨트롤을 마우스 오른쪽 단추로 클릭하고 속성을 클릭한 다음 MaxDataBindDepth를 2로 설정합니다.
TreeView 컨트롤을 마우스 오른쪽 단추로 클릭하고 스마트 태그 표시를 클릭한 다음 TreeView 작업 메뉴에서 노드 편집을 클릭합니다.
TreeView 노드 편집기 대화 상자에서 루트 노드 추가 레이블이 있는 아이콘을 클릭한 다음 속성에서 Text를 제품 목록으로, PopulateOnDemand를 true로 설정합니다.
확인을 클릭합니다.
정적 텍스트만 포함된 트리의 맨 위 노드가 생성됩니다.
Web.config 파일을 구성하려면
도구 상자의 데이터 그룹에서 SqlDataSource 컨트롤을 페이지로 끌어 옵니다.
SqlDataSource 컨트롤을 선택한 다음 스마트 태그 표시를 클릭합니다.
SqlDataSource 작업 메뉴에서 데이터 소스 구성을 클릭합니다.
데이터 소스 구성 - SqlDataSource1 마법사에서 데이터 연결을 선택할 수 있는 페이지를 표시합니다.
"SQL Server에 대한 연결을 만들려면"에서 만든 연결을 응용 프로그램이 데이터베이스에 연결하기 위해 사용해야 하는 데이터 연결 상자에 입력한 후 다음을 클릭합니다.
마법사는 구성 파일에 연결 문자열을 저장할 수 있는 페이지를 표시합니다. 구성 파일에 연결 문자열을 저장할 경우 두 가지 장점이 있습니다.
페이지에 저장하는 것보다 안전합니다.
여러 페이지에서 동일한 연결 문자열을 사용할 수 있습니다.
예, 이 연결을 다음으로 저장합니다. 확인란을 선택하고 다음을 클릭합니다.
데이터베이스에서 검색할 데이터를 지정할 수 있는 페이지가 표시됩니다.
테이블 또는 뷰의 열 지정의 이름 상자에서 Categories를 클릭합니다.
열에서 CategoryID 및 CategoryName 확인란을 선택합니다.
다음을 클릭합니다.
마침을 클릭합니다.
Web.config 파일에서 만든 연결 문자열은 나중에 이 연습에서 정의하는 RunQuery 메서드에 사용됩니다. SqlDataSource 컨트롤은 사용하지 않습니다.
이제 사용자가 노드를 클릭할 때 컨트롤의 자식 노드를 채우는 코드를 추가합니다. 노드를 동적으로 추가하려면 TreeNodePopulate 이벤트에 대한 이벤트 처리기를 만듭니다.
이벤트 처리기를 만들려면
TreeView 컨트롤을 마우스 오른쪽 단추로 클릭한 다음 속성에서 이벤트 아이콘을 클릭합니다.
TreeNodePopulate 이벤트에 해당하는 상자를 두 번 클릭합니다.
Visual Web Developer가 소스 뷰로 전환합니다.
처리기에 다음 강조 표시된 코드를 추가합니다.
Protected Sub TreeView1_TreeNodePopulate(ByVal sender As Object, _ ByVal e As System.Web.UI.WebControls.TreeNodeEventArgs) _ Handles TreeView1.TreeNodePopulate If e.Node.ChildNodes.Count = 0 Then Select Case e.Node.Depth Case 0 PopulateCategories(e.Node) Case 1 PopulateProducts(e.Node) End Select End If End Sub
protected void TreeView1_TreeNodePopulate( object sender, TreeNodeEventArgs e) { if (e.Node.ChildNodes.Count == 0) { switch (e.Node.Depth) { case 0: PopulateCategories(e.Node); break; case 1: PopulateProducts(e.Node); break; } } }
사용자가 노드를 클릭하여 열면 이 코드가 호출됩니다. 트리의 각 수준에서 다른 데이터를 표시하려면 사용자가 클릭한 노드 수준을 확인한 다음 해당 수준의 노드를 적절하게 채워야 합니다. 이 연습에서 사용자가 루트 노드(수준 0)를 클릭하면 PopulateCategories 메서드가 호출됩니다. 사용자가 범주 이름(수준 1)을 클릭하면 PopulateProducts 메서드가 호출됩니다. 해당 메서드에 대해서는 다음 단원에서 설명합니다.
TreeNodeEventArgs 개체를 사용하면 프로그래밍 방식으로 현재 노드에 액세스할 수 있습니다. 노드를 채우려면 이벤트를 추가합니다. 예제 코드에서 노드는 자식 노드를 추가하는 메서드로 전달됩니다.
데이터베이스에서 노드 데이터 읽기
각 노드에 표시할 정보는 데이터베이스에서 가져옵니다. 데이터베이스 쿼리를 수행하고 레코드를 읽고 각 레코드에 대한 노드를 만드는 코드를 작성해야 합니다. 이 연습에서는 SQL Server Northwind 샘플 데이터베이스를 사용한다고 가정하므로 System.Data.SqlClient 네임스페이스의 ADO.NET 개체를 사용해야 합니다.
첫 번째 수준 노드(수준 0)의 경우 사용 가능한 모든 범주의 목록을 표시합니다. 생성되는 코드는 나중에 이 연습에서 만드는 RunQuery 메서드를 호출합니다.
모든 범주에 대한 노드를 추가하려면
소스 뷰로 전환합니다.
단일 파일 페이지에서 작업하는 경우 코드 페이지 맨 위에 다음 지시문을 추가합니다.
<%@ Import Namespace="System.Data" %> <%@ Import Namespace="System.Data.SqlClient" %>
네임스페이스를 가져오면 필요한 코드를 쉽게 작성할 수 있습니다.
코드 숨김 페이지에서 작업하는 경우 코드 숨김 페이지(TreeViewDynamic.aspx.vb or TreeViewDynamic.aspx.cs)로 전환한 다음 코드 파일 맨 위의 클래스 선언 밖에 다음 줄을 추가합니다.
Imports System.Data Imports System.Data.SqlClient
using System.Data; using System.Data.SqlClient;
페이지가 소스 뷰에 있는지 확인합니다.
페이지 코드에 다음 메서드를 추가합니다.
Sub PopulateCategories(ByVal node As TreeNode) Dim sqlQuery As New SqlCommand( _ "Select CategoryName, CategoryID From Categories") Dim ResultSet As DataSet ResultSet = RunQuery(sqlQuery) If ResultSet.Tables.Count > 0 Then Dim row As DataRow For Each row In ResultSet.Tables(0).Rows Dim NewNode As TreeNode = New _ TreeNode(row("CategoryName").ToString(), _ row("CategoryID").ToString()) NewNode.PopulateOnDemand = True NewNode.SelectAction = TreeNodeSelectAction.Expand node.ChildNodes.Add(NewNode) Next End If End Sub
void PopulateCategories(TreeNode node) { SqlCommand sqlQuery = new SqlCommand( "Select CategoryName, CategoryID From Categories"); DataSet resultSet; resultSet = RunQuery(sqlQuery); if (resultSet.Tables.Count > 0) { foreach (DataRow row in resultSet.Tables[0].Rows) { TreeNode NewNode = new TreeNode(row["CategoryName"].ToString(), row["CategoryID"].ToString()); NewNode.PopulateOnDemand = true; NewNode.SelectAction = TreeNodeSelectAction.Expand; node.ChildNodes.Add(NewNode); } } }
이 코드는 쿼리 텍스트를 캡슐화하는 SqlCommand 개체를 만듭니다. 데이터베이스 쿼리를 수행하고 DataSet 개체를 반환하기 위해 사용자가 작성하는 메서드로 개체를 전달합니다. 그런 다음 이 코드는 DataSet 개체의 레코드를 순환하며 수행하고 각 레코드에 대해 새 노드를 만들어 노드 텍스트와 값을 데이터베이스 정보로 설정합니다. 이 코드는 노드 클릭 시 TreeNodePopulate 이벤트가 발생하도록 각 노드의 PopulateOnDemand 속성을 true로 설정합니다. 노드가 기본적으로 확장되도록 SelectAction 속성이 설정됩니다.
두 번째 수준의 노드는 각 범주의 제품을 표시합니다. 따라서 제품 노드를 채우려면 현재 범주의 제품을 검색하고 자식 노드를 적절하게 채울 수 있도록 매개 변수가 있는 쿼리가 필요합니다.
제품에 대한 노드를 추가하려면
페이지 코드에 다음 메서드를 추가합니다.
Sub PopulateProducts(ByVal node As TreeNode) Dim sqlQuery As New SqlCommand sqlQuery.CommandText = "Select ProductName From Products " & _ " Where CategoryID = @categoryid" sqlQuery.Parameters.Add("@categoryid", SqlDbType.Int).Value = _ node.Value Dim ResultSet As DataSet = RunQuery(sqlQuery) If ResultSet.Tables.Count > 0 Then Dim row As DataRow For Each row In ResultSet.Tables(0).Rows Dim NewNode As TreeNode = New _ TreeNode(row("ProductName").ToString()) NewNode.PopulateOnDemand = False NewNode.SelectAction = TreeNodeSelectAction.None node.ChildNodes.Add(NewNode) Next End If End Sub
void PopulateProducts(TreeNode node) { SqlCommand sqlQuery = new SqlCommand(); sqlQuery.CommandText = "Select ProductName From Products " + " Where CategoryID = @categoryid"; sqlQuery.Parameters.Add("@categoryid", SqlDbType.Int).Value = node.Value; DataSet ResultSet = RunQuery(sqlQuery); if (ResultSet.Tables.Count > 0) { foreach (DataRow row in ResultSet.Tables[0].Rows) { TreeNode NewNode = new TreeNode(row["ProductName"].ToString()); NewNode.PopulateOnDemand = false; NewNode.SelectAction = TreeNodeSelectAction.None; node.ChildNodes.Add(NewNode); } } }
이 코드는 범주 노드를 채우는 데 사용된 코드와 유사합니다. 한 가지 차이점은 런타임 시 사용자가 클릭한 노드, 즉 선택한 범주의 값으로 설정되는 매개 변수를 사용하여 SqlCommand 개체가 구성된다는 것입니다. 다른 차이점은 PopulateOnDemand 속성이 false로 설정된다는 것입니다. 이 때문에 제품 아래에 더 이상 노드가 없는 경우에는 필요하지만 확장 단추 없이도 제품 노드가 표시됩니다.
마지막 단계는 쿼리를 수행하고 데이터 집합을 반환하는 메서드를 만드는 것입니다.
쿼리를 수행하려면
페이지에 다음 서브루틴을 추가합니다.
Function RunQuery(ByVal sqlQuery As SqlCommand) As DataSet Dim connectionString As String connectionString = _ ConfigurationManager.ConnectionStrings _ ("NorthwindConnectionString").ConnectionString Dim dbConnection As New SqlConnection dbConnection.ConnectionString = connectionString Dim dbAdapter As New SqlDataAdapter dbAdapter.SelectCommand = sqlQuery sqlQuery.Connection = dbConnection Dim resultsDataSet As DataSet = New DataSet Try dbAdapter.Fill(resultsDataSet) Catch ex As Exception labelStatus.Text = "Unable to connect to SQL Server." End Try Return resultsDataSet End Function
private DataSet RunQuery(SqlCommand sqlQuery) { string connectionString = ConfigurationManager.ConnectionStrings ["NorthwindConnectionString"].ConnectionString; SqlConnection DBConnection = new SqlConnection(connectionString); SqlDataAdapter dbAdapter = new SqlDataAdapter(); dbAdapter.SelectCommand = sqlQuery; sqlQuery.Connection = DBConnection; DataSet resultsDataSet = new DataSet(); try { dbAdapter.Fill(resultsDataSet); } catch { labelStatus.Text = "Unable to connect to SQL Server."; } return resultsDataSet; }
이 코드는 전달된 SqlCommand 개체를 기반으로 데이터 어댑터를 만든 다음 데이터 집합을 만들고 해당 어댑터로 채웁니다.
이제 페이지를 테스트할 수 있습니다.
페이지를 테스트하려면
Ctrl+F5를 눌러 페이지를 실행합니다.
TreeView 컨트롤에 범주 및 제품 목록이 표시됩니다.
범주를 클릭하여 범주가 축소 및 확장되어 각 범주에 대한 제품 목록을 표시하는지 확인합니다.
다음 단계
이 연습에서는 계층 XML 데이터와 관계형 데이터베이스를 모두 사용하여 TreeView 컨트롤을 채웠습니다. TreeView 컨트롤을 사용하여 사이트 탐색 정보와 XML 데이터를 테이블(목록) 데이터로 작업할 수 있습니다.
사이트 탐색에 대한 자세한 내용은 연습: 웹 사이트에 사이트 탐색 추가를 참조하십시오.
추가 XML 데이터 작업에 대한 자세한 내용은 연습: XML 데이터를 표시할 웹 페이지 만들기를 참조하십시오.