DropDownList 컨트롤 채우기
이 부분에서는 하위 디렉터리에 있는 비포함 보고서 목록으로 DropDownList 컨트롤을 채우는 코드를 작성합니다.
**참고 **이 자습서에서는 웹 사이트의 하위 디렉터리에 있는 보고서로 DropDownList 컨트롤을 채웁니다. 또한, 파일 시스템의 다른 곳에 있는 폴더도 다룰 수 있습니다. 폴더에 이미 몇 개의 보고서가 포함되어 있다면 다음 절차를 생략하고 DropDownList 컨트롤 채우기로 이동하십시오.
보고서 폴더를 만들려면
솔루션 탐색기에서 굵게 표시된 프로젝트 이름을 마우스 오른쪽 단추로 클릭하고 폴더 추가를 가리킨 다음 일반 폴더를 클릭합니다.
Name this folder
솔루션 탐색기에서 보고서 폴더를 마우스 오른쪽 단추로 클릭하고 기존 항목 추가를 클릭합니다.
기존 항목 추가 대화 상자에서 파일 형식을 모든****파일(*.*)로 설정합니다.
Crystal Reports 샘플 보고서 디렉터리의 Feature Examples 폴더에서 Hierarchical Grouping.rpt 파일을 찾습니다. (샘플 보고서의 위치는 샘플 보고서 디렉터리를 참조하십시오.)
**참고 **Hierarchical Grouping 보고서는 Access 데이터베이스 xtreme.mdb에서 데이터를 검색합니다. 이 데이터베이스의 위치와 ODBC DSN 구성을 확인하지 않은 경우 확인해야 할 항목을 참조하십시오.
Hierarchical Grouping.rpt 파일을 클릭하여 선택한 다음, 열기를 클릭합니다.
Hierarchical Grouping.rpt 파일이 프로젝트에 추가됩니다.
샘플 보고서 디렉터리에서 보고서를 두 개 더 추가한 후 다음 단계로 이동합니다.
그러면 보고서 폴더 추가 섹션이 완료됩니다.
DropDownList 컨트롤 채우기
이 단계에서는 보고서 하위 디렉터리에 포함된 보고서의 정렬 목록을 채웁니다.
Web Form을 엽니다.
보기 메뉴에서 코드를 클릭합니다.
클래스 서명의 윗부분에서 System.IO 및 System.Collections 네임스페이스에 대한
"Imports"[Visual Basic]
또는"using"[C#]
선언을 클래스의 맨 위에 추가합니다.[Visual Basic]
Imports System.IO Imports System.Collections
[C#]
using System.IO; using System.Collections;
클래스 수준에서 새
ReportDocument
변수,reportDocument
를 만듭니다.[Visual Basic]
Private myReportDocument As ReportDocument
[C#]
private ReportDocument reportDocument;
page_init()
메서드 내에Not IsPostBack
조건 블록을 만듭니다.[Visual Basic]
If Not IsPostBack Then Else End If
[C#]
if(!IsPostBack) { } else { }
**Note **
Not IsPostBack
조건 블록은 페이지를 처음 로드할 때만 실행하는 코드를 캡슐화하는 데 사용됩니다. 컨트롤은 일반적으로Not IsPostBack
조건 블록 내에서 데이터 값에 바인딩되므로 데이터 값과 그 이후의 컨트롤 이벤트는 페이지를 다시 로드할 때 재설정되지 않습니다.Not IsPostBack
조건 블록 내에 보고서 폴더의 경로가 포함된 문자열 변수를 만듭니다.[Visual Basic]
Dim myReportPath As String = Server.MapPath("Reports/")
[C#]
string reportPath = Server.MapPath("Reports/");
**노트 **이전 단계를 생략하였고 보고서 디렉터리가 기존에 있는 경우 "Reports/" 대신 해당 디렉터리의 파일 경로를 입력합니다.
Directory.GetFiles()
메서드를 사용하여 보고서 폴더의 내용을 검색합니다. 결과를reports
배열에 할당합니다.[Visual Basic]
Dim reports() As String = Directory.GetFiles(myReportPath, "*.rpt")
[C#]
string[] reports = Directory.GetFiles(reportPath, "*.rpt");
다음 줄에서
SortedList
클래스를 인스턴스화하여 부모 인터페이스인IDictionary
로 전달합니다.[Visual Basic]
Dim mySortedList As IDictionary = New SortedList
[C#]
IDictionary sortedList = new SortedList();
다음으로,
reports
의 각 요소를 순환하는For Each
루프를 만듭니다.[Visual Basic]
For Each path As String In reports Next
[C#]
foreach (string path in reports) { }
코드의 다음 세 줄은 문자열 조작 메서드를 사용하여 각 보고서 이름에서 파일 경로를 제거합니다. 이 줄들을
For Each
루프에 삽입합니다.[Visual Basic]
Dim reportNamePrefix As Integer = path.LastIndexOf("\") + 1 Dim reportNameLength As Integer = path.Length - reportNamePrefix Dim reportName As String = path.Substring(reportNamePrefix, reportNameLength)
[C#]
int reportNamePrefix = path.LastIndexOf(@"\") + 1; int reportNameLength = path.Length - reportNamePrefix; string reportName = path.Substring(reportNamePrefix, reportNameLength);
또한
sortedList
IDictionary에 잘린 보고서 이름을 추가하는 코드를For Each
루프 내에 추가합니다.[Visual Basic]
mySortedList.Add(path, reportName)
[C#]
sortedList.Add(path, reportName);
DropDownList 컨트롤에 정렬 목록 바인딩
이 부분에서는 IDictionary
데이터 소스를 DropDownList
컨트롤에 바인딩하는 방법에 대해 설명합니다. 먼저 IDictionary
컬렉션 요소와 DropDownList
필드 간의 관계를 정의합니다. 그런 다음 IDictionary
데이터 소스를 DropDownList
컨트롤에 바인딩합니다.
foreach
루프 외부에서DropDownList
의 value 필드를sortedList instance
의 key 속성에 할당하는 코드를 추가합니다.[Visual Basic]
reportsList.DataTextField = "value"
[C#]
reportsList.DataTextField = "value";
다음으로
DropDownList
컨트롤의 value 필드를sortedList instance
의 key 속성에 할당합니다.[Visual Basic]
reportsList.DataValueField = "key"
[C#]
reportsList.DataValueField = "key";
SortedList
인스턴스를DropDownList control
의dataSource
속성에 할당합니다.[Visual Basic]
reportsList.DataSource = mysortedList
[C#]
reportsList.DataSource = sortedList;
마지막으로 데이터 소스를
DropDownList
에 바인딩합니다.[Visual Basic]
reportsList.DataBind()
[C#]
reportsList.DataBind();
이제,
If Not IsPostBack
조건 블록의 내용이 완성되었습니다. 다음 부분에서는 새 값을ReportDocument
인스턴스에 할당하지 않고 페이지를 새로고칠 경우 어떤 일이 발생할지 정의하는 코드를Else
조건 블록 내에 작성합니다.Else 문에서 보고서 문서 인스턴스를 현재 세션에 포함되어 있는 보고서에 할당합니다.
[Visual Basic]
myReportDocument = CType(Session("myReportDocument"), ReportDocument)
[C#]
reportDocument = (ReportDocument)Session["reportDocument"];
**Note **세션은 일반 개체만 반환하므로 보고서를 사용자의 보고서 유형으로 캐스팅해야 합니다. 포함 보고서를 사용하는지 비포함 보고서를 사용하는지 여부에 상관없이 검색된 개체를 ReportDocument 형식으로 캐스팅합니다.
다음 줄에서 ReportDocument 인스턴스를 CrystalReportViewer 컨트롤에 바인딩합니다.
[Visual Basic]
myCrystalReportViewer.ReportSource = myReportDocument
[C#]
crystalReportViewer.ReportSource = reportDocument;
파일 메뉴에서 모두 저장을 선택합니다.
빌드 메뉴에서 솔루션 빌드를 선택합니다.
빌드 오류가 발생하면 바로 수정합니다.
다음 부분에서는 reportsList DropDownList에서 선택한 내용을 토대로 보고서를 바인딩하는 클릭 이벤트를 추가합니다.
보고서 바인딩을 위한 클릭 이벤트 추가 작업으로 이동합니다.
참고 항목
기타 자습서 | 자습서 및 샘플 코드 | 자습서의 샘플 코드 디렉터리
© 2005 Business Objects SA. All rights reserved.
Business Objects http://korea.businessobjects.com/ 지퓖E서비스 http://support.businessobjects.com/ |