다음을 통해 공유


코드에서 직접 매개 변수 설정

이제 CustomersByCity 보고서에 대해 도시 매개 변수 필드에 두 개의 값("Paris" 및 "Tokyo")을 설정할 수 있습니다.

여기에는 몇 가지 코딩 작업이 필요하며 이 과정은 다음과 같이 구분할 수 있습니다.

  • "도시" 매개 변수 필드 이름을 저장하기 위한 PARAMETER_FIELD_NAME 상수가 필요합니다.
  • 이 자습서의 다른 부분에서는 현재 값을 도시 매개 변수에 추가하는 코드가 사용되므로 이 코드를 별도의 도우미 메서드로 만듭니다.
  • ConfigureCrystalReports() 메서드 내에서 ArrayList 인스턴스에 "Paris" 및 "Tokyo" 매개 변수를 추가하고 보고서와 ArrayList 인스턴스를 도우미 메서드에 전달하여 처리합니다.

PARAMETER_FIELD_NAME 상수를 만들려면

  1. 이 Web Form 또는 Windows Form에 대한 코드 숨김 클래스로 돌아옵니다.

  2. 클래스 수준에서 새로운 문자열 상수인 PARAMETER_FIELD_NAME을 만들고 값을 "도시"로 설정합니다.

    Private Const PARAMETER_FIELD_NAME As String = "City"
    
    private const string PARAMETER_FIELD_NAME = "City";
    

보고서에서 매개 변수에 현재 값을 추가하는 도우미 메서드를 만들려면

이제 보고서에서 매개 변수에 현재 값을 추가하는 도우미 메서드를 만들 준비가 되었습니다.

  1. 이 Web Form 또는 Windows Form에 대한 코드 숨김 클래스로 돌아옵니다.

  2. 클래스 서명 위에 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;
```
  1. 메서드 서명에 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)
{
}
```
  1. 이 메서드 내에서 인덱싱된 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 네임스페이스에 대한 &quot;Imports&quot; [Visual Basic] 또는 &quot;using&quot; [C#] 선언을 코드 숨김 클래스 위에 포함시켜야 합니다. 이 선언은 <a href="ms227453(v=vs.90).md">&quot;프로젝트 설정&quot;</a> 과정에서 추가했습니다.</p></td>
</tr>
</tbody>
</table>

``` vb
Dim currentParameterValues As ParameterValues = New ParameterValues()
```

``` csharp
ParameterValues currentParameterValues = new ParameterValues();
```
  1. ArrayList 인스턴스에서 Object 형식으로 제공하는 모든 값을 가져오는 foreach 루프를 만듭니다.

    Note참고

    이 메서드는 ArrayList에서 값을 검색합니다. 나중에 ArrayList에 값을 추가하는 코드를 작성합니다.

    For Each submittedValue As Object In myArrayList
    
    Next
    
    foreach(object submittedValue in arrayList)
    {
    }
    
  2. foreach 루프 내에서 ParameterDiscreteValue 클래스를 선언하고 인스턴스화합니다.

    Dim myParameterDiscreteValue As ParameterDiscreteValue = New ParameterDiscreteValue()
    
    ParameterDiscreteValue parameterDiscreteValue = new ParameterDiscreteValue();
    
  3. foreach 루프 안에서 submittedValue를 문자열로 변환하고 ParameterDiscreteValue 인스턴스의 Value 속성에 전달합니다.

    myParameterDiscreteValue.Value = submittedValue.ToString()
    
    parameterDiscreteValue.Value = submittedValue.ToString();
    
  4. foreach 루프 안에서 ParameterDiscreteValue 인스턴스를 인덱싱된 currentParameterValues 클래스에 추가합니다.

    foreach 루프 내의 코드를 모두 작성했습니다. 이후의 단계에서 만드는 나머지 코드는 foreach 루프 뒤에 배치합니다.

    currentParameterValues.Add(myParameterDiscreteValue)
    
    currentParameterValues.Add(parameterDiscreteValue);
    
  5. foreach 루프 밖에서 PARAMETER_FIELD_NAME 상수의 인덱스 항목을 기반으로 인덱싱된 클래스인 ParameterFields의 ParameterField 인스턴스를 가져옵니다.

    Dim myParameterField As ParameterField = myParameterFields(PARAMETER_FIELD_NAME)
    
    ParameterField parameterField = parameterFields[PARAMETER_FIELD_NAME];
    
  6. ParameterField 인스턴스의 CurrentValues 속성에 currentParameterValues 인스턴스를 전달합니다.

    myParameterField.CurrentValues = currentParameterValues
    
    parameterField.CurrentValues = currentParameterValues;
    

보고서를 CrystalReportViewer 컨트롤에 바인딩하기 전에 SetCurrentValuesForParameterField () 메서드를 호출하려면

이 단계에서는 ArrayList 인스턴스에서 제공하는 값을 가져와 ParameterField 인스턴스에 현재 값으로 배치하는 메서드를 만드는 방법을 설명했습니다. 이제 CrystalReportViewer 컨트롤에 보고서를 바인딩하기 전에 보고서에 매개 변수 설정이 있음을 알리기 위해 이 메서드를 호출해야 합니다.

  1. ConfigureCrystalReports() 메서드에서 CrystalReportViewer 컨트롤에 보고서를 바인딩하는 줄 위에 ArrayList를 선언하고 인스턴스화합니다.

    Dim myArrayList As ArrayList = New ArrayList()
    
    ArrayList arrayList = new ArrayList();
    
  2. 도시 이름인 "Paris" 및 "Tokyo"를 ArrayList 인스턴스에 문자열로 추가합니다.

    myArrayList.Add("Paris")
    myArrayList.Add("Tokyo")
    
    arrayList.Add("Paris");
    arrayList.Add("Tokyo");
    
  3. CrystalReportViewer 컨트롤을 바인딩하는 코드 아래에 CrystalReportViewer 컨트롤의 ParameterFieldInfo 속성에서 ParameterFields 인스턴스를 가져오는 코드를 작성합니다.

    Dim myParameterFields As ParameterFields = myCrystalReportViewer.ParameterFieldInfo
    
    ParameterFields parameterFields = crystalReportViewer.ParameterFieldInfo;
    
  4. SetCurrentValuesForParameterField() 메서드를 호출하고 ParameterFields 인스턴스와 ArrayList 인스턴스를 전달합니다.

    SetCurrentValuesForParameterField(myParameterFields, myArrayList)
    
    SetCurrentValuesForParameterField(parameterFields, arrayList);
    

CustomersByCity 보고서가 로드되는지 테스트하려면

이제 프로젝트를 빌드하고 실행할 준비가 되었습니다. 이제 현재 값을 매개 변수 필드로 설정하는 코드를 작성했으므로 보고서가 성공적으로 표시되어야 합니다.

  1. 빌드 메뉴에서 솔루션 빌드를 선택합니다.
  2. 빌드 오류가 발생하면 바로 수정합니다.
  3. 디버그 메뉴에서 시작을 클릭합니다.
  4. Visual Studio로 돌아간 다음 중지를 클릭하여 디버그 모드를 종료합니다.

다음 부분에서는 매개 변수 필드에서 기본값을 검색하여 ListBox 컨트롤에 이 값을 설정하는 방법을 설명합니다. 이 방법은 자습서의 마지막 부분에서 새로운 도시를 동적으로 선택하고 새로 선택한 도시를 기반으로 보고서를 필터링할 때 사용합니다.