기본 매개 변수를 표시하는 ListBox 컨트롤 만들기
자습서의 나머지 부분에서는 ListBox 컨트롤에 매개 변수 필드에 대한 전체 기본값 목록을 표시하고 이 ListBox 컨트롤에서 선택한 항목에 따라 보고서의 내용을 다시 필터링하는 방법을 설명합니다.
이 부분에서는 매개 변수 필드의 기본값을 사용하여 ListBox 컨트롤을 채우는 방법을 설명합니다.
참고 |
---|
자습서 앞부분에서 이 보고서를 만들 때 전체 도시 목록을 기본값으로 설정했습니다. |
이를 위해 ListBox 컨트롤을 추가 및 구성한 다음 ListBox 컨트롤을 채우는 도우미 메서드를 만들어야 합니다.
폼에 ListBox 컨트롤을 만들고 구성하려면
Web Form 또는 Windows Form을 엽니다.
보기 메뉴에서 디자이너를 클릭합니다.
웹 사이트를 개발하는 경우 다음 작업을 수행합니다.
- CrystalReportViewer 컨트롤을 클릭하여 선택합니다.
- 키보드에서 왼쪽 화살표를 눌러 커서가 깜빡이면 Enter 키를 누릅니다.
CrystalReportViewer 컨트롤이 한 줄 아래로 내려갑니다.
Windows 프로젝트를 개발하는 경우 다음 작업을 수행합니다.
- CrystalReportViewer 컨트롤을 클릭하여 선택합니다.
- 속성 창에서 Dock를 "Bottom"으로 설정합니다.
참고 Visual Studio에서 Dock 속성을 선택하면 옵션 목록 대신 프레임이 나타납니다. "Bottom"에 해당하는 프레임 부분을 선택합니다.
- Windows Form과 CrystalReportViewer 컨트롤의 크기를 조정하여 보고서를 표시하기에 충분한 크기로 CrystalReportViewer를 설정합니다. CrystalReportViewer 컨트롤 위에 ListBox 컨트롤을 배치하기 위한 공간을 마련해 둡니다.
- 속성 창에서 Anchor를 "Top, Bottom, Left, Right"로 설정합니다.
- Windows Form과 CrystalReportViewer 컨트롤의 크기를 조정하여 보고서를 표시하기에 충분한 크기로 CrystalReportViewer를 설정합니다. CrystalReportViewer 컨트롤 위에 ListBox 컨트롤을 배치하기 위한 공간을 마련해 둡니다.
도구 상자에서 ListBox 컨트롤을 CrystalReportViewer 컨트롤 위로 끕니다.
참고 Visual Studio를 사용하는 경우 ListBox에 스마트 작업이 표시되면 Esc 키를 눌러 닫습니다.
ListBox 컨트롤을 클릭하여 선택합니다.
속성 창에서 다음을 수행합니다.
- ID 또는 Name을 "defaultParameterValuesList"로 설정합니다.
- SelectionMode를 "Multiple"(Windows 프로젝트의 경우 "MultiExtended")로 설정합니다.
파일 메뉴에서 모두 저장을 선택합니다.
이제 매개 변수 필드에서 기본값을 검색하는 도우미 메서드를 만들 준비가 되었습니다.
매개 변수 필드에서 기본값을 검색하는 도우미 메서드를 만들려면
Web Form 또는 Windows Form을 엽니다.
보기 메뉴에서 코드를 클릭합니다.
메서드 시그니처로 전달된 ReportDocument를 사용하여 ArrayList 인스턴스를 반환하는 GetDefaultValuesFromParameterField()라는 새 private 메서드를 클래스의 맨 아래에 만듭니다.
``` vb
Private Function GetDefaultValuesFromParameterField(ByVal myReportDocument As ReportDocument) As ArrayList
End Function
```
``` csharp
private ArrayList GetDefaultValuesFromParameterField(ReportDocument reportDocument)
{
}
```
GetDefaultValuesFromParameterField() 메서드 내에서, ReportDocument 인스턴스의 DataDefinition 속성에서 인덱싱된 ParameterFieldDefinitions 클래스를 검색합니다.
Dim myParameterFieldDefinitions As ParameterFieldDefinitions = myReportDocument.DataDefinition.ParameterFields
ParameterFieldDefinitions parameterFieldDefinitions = reportDocument.DataDefinition.ParameterFields;
PARAMETER_FIELD_NAME 상수의 인덱스 항목에 따라 인덱싱된 ParameterFieldDefinitions 클래스에서 ParameterFieldDefinition 인스턴스를 검색합니다.
Dim myParameterFieldDefinition As ParameterFieldDefinition = myParameterFieldDefinitions(PARAMETER_FIELD_NAME)
ParameterFieldDefinition parameterFieldDefinition = parameterFieldDefinitions[PARAMETER_FIELD_NAME];
ParameterFieldDefinition 인스턴스의 DefaultValues 속성에서 인덱싱된 ParameterValues 클래스를 defaultParameterValues 변수로 검색합니다.
Dim defaultParameterValues As ParameterValues = myParameterFieldDefinition.DefaultValues
ParameterValues defaultParameterValues = parameterFieldDefinition.DefaultValues;
ArrayList를 선언하고 인스턴스화합니다.
Dim myArrayList As ArrayList = New ArrayList()
ArrayList arrayList = new ArrayList();
defaultParameterValues에서 각 ParameterValue 인스턴스를 검색하는 foreach 루프를 만듭니다.
``` vb
For Each myParameterValue As ParameterValue In defaultParameterValues
Next
```
``` csharp
foreach(ParameterValue parameterValue in defaultParameterValues)
{
}
```
foreach 루프 안에 범위 매개 변수와 반대되는 개념의 이산 매개 변수 값을 확인하는 중첩 조건 블록을 만듭니다. Crystal Reports for Visual Studio의 버전 간에 API가 조금씩 다르기 때문에 이 조건 블록에는 두 가지 버전이 있습니다. IntelliSense로 API를 확인하여 사용 가능한 ParameterValue의 속성을 확인하십시오.
사용할 수 있는 속성이 IsRange인 경우 foreach 루프 안에 다음 코드를 입력합니다.
If (Not myParameterValue.IsRange) Then End If
if(!parameterValue.IsRange) { }
Kind 속성(DiscreteValue, RangeValue, DiscreteAndRangeValue라는 세 개의 값을 가진 DiscreteOrRangeKind 열거형)을 사용할 수 있는 경우 foreach 루프 안에 다음 코드를 입력합니다.
If (myParameterValue.Kind = DiscreteOrRangeKind.DiscreteValue) Then End If
if(parameterValue.Kind == DiscreteOrRangeKind.DiscreteValue) { }
이 중첩 조건 블록 내에서 ParameterValue 인스턴스를 확장 클래스인 DiscreteParameterValue로 캐스팅합니다.
Dim myParameterDiscreteValue As ParameterDiscreteValue = CType(myParameterValue, ParameterDiscreteValue)
ParameterDiscreteValue parameterDiscreteValue = (ParameterDiscreteValue)parameterValue;
또한 중첩 조건 블록 안에서 문자열로 변환된 ParameterDiscreteValue 인스턴스의 Value 속성을 ArrayList 인스턴스에 추가합니다.
myArrayList.Add(myParameterDiscreteValue.Value.ToString())
arrayList.Add(parameterDiscreteValue.Value.ToString());
메서드에서 ArrayList 인스턴스를 반환하는 코드를 조건 블록 및 foreach 루프 외부의 메서드 맨 끝에 삽입합니다.
Return myArrayList
return arrayList;
웹 프로젝트에서 메서드를 통해 반환된 ArrayList를 ListBox에 바인딩하려면
지금까지 매개 변수 필드에서 기본값을 검색하여 메서드에서 ArrayList로 반환했습니다. 이제 이 ArrayList를 defaultParameterValuesList ListBox 컨트롤에 바인딩합니다.
이 코드는 웹 프로젝트를 사용하는지 또는 Windows 프로젝트를 사용하는지에 따라 조금 다르므로 아래에서 웹 또는 Windows에 해당하는 절차만 수행합니다.
ConfigureCrystalReports() 메서드의 코드에서 "Tokyo"라는 문자열 값을 ArrayList 인스턴스에 추가하는 줄 바로 뒤에 두 개의 줄 바꿈을 삽입합니다.
이 두 줄 사이에 페이지를 처음 로드할 때 defaultParameterValuesList ListBox 컨트롤에 대한 데이터 소스를 설정하는 추가 코드를 입력할 수 있습니다.
이 두 줄 사이에 Not IsPostBack 조건 블록을 만듭니다.
If Not IsPostBack Then End If
if(!IsPostBack) { }
참고 Not IsPostBack 조건 블록은 페이지를 처음 로드할 때만 실행하는 코드를 캡슐화하는 데 사용됩니다. 컨트롤은 일반적으로 Not IsPostBack 조건 블록 내에서 데이터 값에 바인딩되므로 데이터 값과 그 이후의 컨트롤 이벤트는 페이지를 다시 로드할 때 재설정되지 않습니다.
Not IsPostBack 조건 블록 안에서 CustomersByCity 보고서 인스턴스를 메서드 매개 변수로 전달하여 defaultParameterValuesList ListBox의 DataSource 속성을 GetDefaultValuesFromParameterField() 도우미 메서드로 설정합니다.
defaultParameterValuesList.DataSource = GetDefaultValuesFromParameterField(customersByCityReport)
defaultParameterValuesList.DataSource = GetDefaultValuesFromParameterField(customersByCityReport);
Not IsPostBack 조건 블록 안에서 defaultParameterValuesList ListBox의 DataBind() 메서드를 호출합니다.
defaultParameterValuesList.DataBind()
defaultParameterValuesList.DataBind();
Windows 프로젝트에서 메서드를 통해 반환된 ArrayList를 ListBox에 바인딩하려면
ConfigureCrystalReports() 메서드의 코드에서 "Tokyo"라는 문자열 값을 ArrayList 인스턴스에 추가하는 줄 바로 뒤에 두 개의 줄 바꿈을 삽입합니다.
이 두 줄 사이에 페이지를 처음 로드할 때 defaultParameterValuesList ListBox 컨트롤에 대한 데이터 소스를 설정하는 추가 코드를 입력할 수 있습니다.
이 두 줄 사이에서 CustomersByCity 보고서 인스턴스를 메서드 매개 변수로 전달하여 defaultParameterValuesList ListBox의 DataSource 속성을 GetDefaultValuesFromParameterField() 도우미 메서드로 설정합니다.
``` vb
defaultParameterValuesList.DataSource = GetDefaultValuesFromParameterField(customersByCityReport)
```
``` csharp
defaultParameterValuesList.DataSource = GetDefaultValuesFromParameterField(customersByCityReport);
```
defaultParameterValuesList ListBox 컨트롤이 채워졌는지 테스트하려면
이제 프로젝트를 빌드하고 실행하여 defaultParameterValuesList ListBox가 채워졌는지 확인할 준비가 되었습니다.
빌드 메뉴에서 솔루션 빌드를 선택합니다.
빌드 오류가 발생하면 바로 수정합니다.
디버그 메뉴에서 시작을 클릭합니다.
defaultParameterValuesList ListBox 컨트롤에 전체 기본값 목록이 표시됩니다. 이 자습서에서는 도시 목록이 나타납니다.
Visual Studio로 돌아간 다음 중지를 클릭하여 디버그 모드를 종료합니다.
다음 부분에서는 defaultParameterValuesList ListBox 컨트롤에서 선택한 항목에 따라 보고서를 다시 표시하는 단추를 추가합니다.