코드에서 직접 매개 변수 설정
이제 CustomersByCity 보고서에 대해 도시 매개 변수 필드에 두 개의 값("Paris" 및 "Tokyo")을 설정할 수 있습니다.
여기에는 몇 가지 코딩 작업이 필요하며 이 과정은 다음과 같이 구분할 수 있습니다.
- "도시" 매개 변수 필드 이름을 저장하기 위한 PARAMETER_FIELD_NAME 상수가 필요합니다.
- 이 자습서의 다른 부분에서는 현재 값을 도시 매개 변수에 추가하는 코드가 사용되므로 이 코드를 별도의 도우미 메서드로 만듭니다.
- ConfigureCrystalReports() 메서드 내에서 ArrayList 인스턴스에 "Paris" 및 "Tokyo" 매개 변수를 추가하고 보고서와 ArrayList 인스턴스를 도우미 메서드에 전달하여 처리합니다.
PARAMETER_FIELD_NAME 상수를 만들려면
이 Web Form 또는 Windows Form에 대한 코드 숨김 클래스로 돌아옵니다.
클래스 수준에서 새로운 문자열 상수인 PARAMETER_FIELD_NAME을 만들고 값을 "도시"로 설정합니다.
Private Const PARAMETER_FIELD_NAME As String = "City"
private const string PARAMETER_FIELD_NAME = "City";
보고서에서 매개 변수에 현재 값을 추가하는 도우미 메서드를 만들려면
이제 보고서에서 매개 변수에 현재 값을 추가하는 도우미 메서드를 만들 준비가 되었습니다.
이 Web Form 또는 Windows Form에 대한 코드 숨김 클래스로 돌아옵니다.
클래스 서명 위에 System.Collections 네임스페이스에 대한 "Imports" [Visual Basic] 또는 "using" [C#] 선언이 없으면 클래스 위에 해당 선언을 추가합니다.
<table>
<colgroup>
<col style="width: 100%" />
</colgroup>
<thead>
<tr class="header">
<th><img src="images\e2c9s1d7.alert_note(ko-kr,VS.90).gif" alt="Note" class="note" />참고</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><p>이 선언은 ArrayList 클래스에 액세스하는 데 필요합니다.</p></td>
</tr>
</tbody>
</table>
``` vb
Imports System.Collections
```
``` csharp
using System.Collections;
```
- 메서드 서명에 ParameterFields 및 ArrayList 두 변수가 있는 SetCurrentValuesForParameterField()라는 private 메서드를 클래스 맨 아래에서 새로 만듭니다.
``` vb
Private Sub SetCurrentValuesForParameterField(ByVal myParameterFields As ParameterFields, ByVal myArrayList As
ArrayList)
End Sub
```
``` csharp
private void SetCurrentValuesForParameterField(ParameterFields parameterFields, ArrayList arrayList)
{
}
```
- 이 메서드 내에서 인덱싱된 ParameterValues 클래스를 currentParameterValues 변수로 선언하고 인스턴스화합니다.
<table>
<colgroup>
<col style="width: 100%" />
</colgroup>
<thead>
<tr class="header">
<th><img src="images\e2c9s1d7.alert_note(ko-kr,VS.90).gif" alt="Note" class="note" />참고</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><p>ParameterValues 클래스에 액세스하려면 CrystalDecisions.Shared 네임스페이스에 대한 "Imports" [Visual Basic] 또는 "using" [C#] 선언을 코드 숨김 클래스 위에 포함시켜야 합니다. 이 선언은 <a href="ms227453(v=vs.90).md">"프로젝트 설정"</a> 과정에서 추가했습니다.</p></td>
</tr>
</tbody>
</table>
``` vb
Dim currentParameterValues As ParameterValues = New ParameterValues()
```
``` csharp
ParameterValues currentParameterValues = new ParameterValues();
```
ArrayList 인스턴스에서 Object 형식으로 제공하는 모든 값을 가져오는 foreach 루프를 만듭니다.
참고 이 메서드는 ArrayList에서 값을 검색합니다. 나중에 ArrayList에 값을 추가하는 코드를 작성합니다.
For Each submittedValue As Object In myArrayList Next
foreach(object submittedValue in arrayList) { }
foreach 루프 내에서 ParameterDiscreteValue 클래스를 선언하고 인스턴스화합니다.
Dim myParameterDiscreteValue As ParameterDiscreteValue = New ParameterDiscreteValue()
ParameterDiscreteValue parameterDiscreteValue = new ParameterDiscreteValue();
foreach 루프 안에서 submittedValue를 문자열로 변환하고 ParameterDiscreteValue 인스턴스의 Value 속성에 전달합니다.
myParameterDiscreteValue.Value = submittedValue.ToString()
parameterDiscreteValue.Value = submittedValue.ToString();
foreach 루프 안에서 ParameterDiscreteValue 인스턴스를 인덱싱된 currentParameterValues 클래스에 추가합니다.
foreach 루프 내의 코드를 모두 작성했습니다. 이후의 단계에서 만드는 나머지 코드는 foreach 루프 뒤에 배치합니다.
currentParameterValues.Add(myParameterDiscreteValue)
currentParameterValues.Add(parameterDiscreteValue);
foreach 루프 밖에서 PARAMETER_FIELD_NAME 상수의 인덱스 항목을 기반으로 인덱싱된 클래스인 ParameterFields의 ParameterField 인스턴스를 가져옵니다.
Dim myParameterField As ParameterField = myParameterFields(PARAMETER_FIELD_NAME)
ParameterField parameterField = parameterFields[PARAMETER_FIELD_NAME];
ParameterField 인스턴스의 CurrentValues 속성에 currentParameterValues 인스턴스를 전달합니다.
myParameterField.CurrentValues = currentParameterValues
parameterField.CurrentValues = currentParameterValues;
보고서를 CrystalReportViewer 컨트롤에 바인딩하기 전에 SetCurrentValuesForParameterField () 메서드를 호출하려면
이 단계에서는 ArrayList 인스턴스에서 제공하는 값을 가져와 ParameterField 인스턴스에 현재 값으로 배치하는 메서드를 만드는 방법을 설명했습니다. 이제 CrystalReportViewer 컨트롤에 보고서를 바인딩하기 전에 보고서에 매개 변수 설정이 있음을 알리기 위해 이 메서드를 호출해야 합니다.
ConfigureCrystalReports() 메서드에서 CrystalReportViewer 컨트롤에 보고서를 바인딩하는 줄 위에 ArrayList를 선언하고 인스턴스화합니다.
Dim myArrayList As ArrayList = New ArrayList()
ArrayList arrayList = new ArrayList();
도시 이름인 "Paris" 및 "Tokyo"를 ArrayList 인스턴스에 문자열로 추가합니다.
myArrayList.Add("Paris") myArrayList.Add("Tokyo")
arrayList.Add("Paris"); arrayList.Add("Tokyo");
CrystalReportViewer 컨트롤을 바인딩하는 코드 아래에 CrystalReportViewer 컨트롤의 ParameterFieldInfo 속성에서 ParameterFields 인스턴스를 가져오는 코드를 작성합니다.
Dim myParameterFields As ParameterFields = myCrystalReportViewer.ParameterFieldInfo
ParameterFields parameterFields = crystalReportViewer.ParameterFieldInfo;
SetCurrentValuesForParameterField() 메서드를 호출하고 ParameterFields 인스턴스와 ArrayList 인스턴스를 전달합니다.
SetCurrentValuesForParameterField(myParameterFields, myArrayList)
SetCurrentValuesForParameterField(parameterFields, arrayList);
CustomersByCity 보고서가 로드되는지 테스트하려면
이제 프로젝트를 빌드하고 실행할 준비가 되었습니다. 이제 현재 값을 매개 변수 필드로 설정하는 코드를 작성했으므로 보고서가 성공적으로 표시되어야 합니다.
- 빌드 메뉴에서 솔루션 빌드를 선택합니다.
- 빌드 오류가 발생하면 바로 수정합니다.
- 디버그 메뉴에서 시작을 클릭합니다.
- Visual Studio로 돌아간 다음 중지를 클릭하여 디버그 모드를 종료합니다.
다음 부분에서는 매개 변수 필드에서 기본값을 검색하여 ListBox 컨트롤에 이 값을 설정하는 방법을 설명합니다. 이 방법은 자습서의 마지막 부분에서 새로운 도시를 동적으로 선택하고 새로 선택한 도시를 기반으로 보고서를 필터링할 때 사용합니다.