다음을 통해 공유


매개 변수 상태 유지 구성

이 부분에서는 ListBox 컨트롤을 통해 선택한 매개 변수 필드에 대한 상태를 유지하기 위한 구성 작업을 수행합니다(웹 기반 자습서).

"자습서: Session을 사용하여 ReportDocument 개체 모델 유지" 자습서를 통해 알 수 있듯이 사용자가 CrystalReportViewer 도구 모음에서 다음 페이지 및 확대/축소 같은 단추를 클릭하여 웹 페이지를 다시 로드할 때마다 ReportDocument 개체 모델에 대한 변경 사항이 손실됩니다.

매개 변수의 선택 상태가 유지되지 않는지 확인하려면

  1. 빌드 메뉴에서 솔루션 빌드를 선택합니다.

  2. 빌드 오류가 발생하면 바로 수정합니다.

  3. 디버그 메뉴에서 시작을 클릭합니다.

  4. ListBox 컨트롤에서 Shift 키를 누른 채로 목록의 도시를 모두 선택합니다.

  5. 보고서 다시 표시를 클릭합니다.

    페이지가 다시 로드되고 모든 도시의 모든 고객에 대한 고객 레코드가 표시됩니다. 이는 여러 페이지로 구성된 크기가 큰 보고서입니다.

  6. CrystalReportViewer 도구 모음에서 다음 페이지를 클릭합니다.

    선택한 도시의 목록이 유지되지 않습니다. 보고서의 2페이지가 표시되지 않고, 시작 매개 변수 설정(Paris 및 Tokyo)이 다시 표시되는 것을 확인할 수 있습니다.

  7. Visual Studio로 돌아간 다음 중지를 클릭하여 디버그 모드를 종료합니다.

웹 페이지를 다시 로드할 때 ReportDocument 개체 모델 내에서 변경된 내용이 유지되도록 하려면 응용 프로그램에 상태 유지 코드를 추가해야 합니다.

먼저 Not IsPostBack 조건 블록에 Else 블록을 추가하여 ConfigureCrystalReports() 메서드에 상태 유지 코드를 추가합니다. 그런 다음 조건 블록에서 각 조건에 대한 ArrayList 인스턴스의 고유한 값을 설정합니다. 페이지 시작 시 ArrayList 인스턴스에 대한 기본값("Paris" 및 "Tokyo")을 설정합니다. 페이지를 다시 로드할 때 Session에 저장된 ArrayList 인스턴스를 검색합니다.

ConfigureCrystalReports() 메서드에 상태 유지 코드를 추가하려면

  1. ConfigureCrystalReports() 메서드에서 Paris 및 Tokyo를 ArrayList에 추가하는 코드 두 줄을 잘라내 If Not IsPostBack 조건 블록의 맨 아래에 붙여넣습니다.

    이 코드를 작성한 후 조건 블록은 다음과 같은 모양이 됩니다.

    If Not IsPostBack Then
    defaultParameterValuesList.DataSource =
    GetDefaultValuesFromParameterField(customersByCityReport)
    defaultParameterValuesList.DataBind()
    myArrayList.Add("Paris")
    myArrayList.Add("Tokyo")
    End If
    
    if (!IsPostBack)
    {
    defaultParameterValuesList.DataSource =
    GetDefaultValuesFromParameterField(customersByCityReport);
    defaultParameterValuesList.DataBind();
    arrayList.Add("Paris");
    arrayList.Add("Tokyo");
    }
    
  2. ArrayList 인스턴스를 Session에 할당하는 코드의 마지막 줄을 조건 블록에 추가합니다.

<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>변수 이름을 추가된 Session의 문자열 식별자로 사용할 수 있습니다.</p></td>
</tr>
</tbody>
</table>

``` vb
Session("myArrayList") = myArrayList
```

``` csharp
Session["arrayList"] = arrayList;
```
  1. Not IsPostBack 조건 블록에 Else 조건을 추가합니다.

  2. Session에서 ArrayList 인스턴스를 검색하여 ArrayList 개체로 캐스팅하는 코드를 Else 블록 안에 작성합니다.

    myArrayList = Ctype(Session("myArrayList"), ArrayList)
    
    arrayList = (ArrayList)Session["arrayList"];
    

이 코드를 작성한 후 조건 블록은 다음과 같은 모양이 됩니다.

ConfigureCrystalReports() 메서드가 위와 같이 변경되었으므로 ArrayList의 현재 인스턴스를 항상 SetCurrentValuesForParameterField() 메서드에 전달할 수 있습니다.

다음 부분에서는 단추 클릭 이벤트의 코드와 관련된 두 가지 사항을 변경합니다.

  • 작성된 ArrayList를 가져와 Session에 할당합니다.
  • 보고서를 구성하고 표시하는 코드의 마지막 두 줄을 ConfigureCrystalReports() 메서드 호출로 바꿔 이 기능을 공통 코드 집합에서 수행하도록 만듭니다.

세션 상태 유지를 위해 단추 클릭 이벤트 메서드의 코드를 수정하려면

  1. 단추 클릭 이벤트 메서드의 코드에서 다음과 같은 마지막 두 줄을 삭제합니다.

    코드에서 삭제할 첫 번째 줄은 SetCurrentValuesForParameterField() 메서드에 대한 호출입니다. 코드에서 삭제할 두 번째 줄은 customersByCityReport 인스턴스를 CrystalReportViewer 컨트롤의 ReportSource 속성에 바인딩하는 코드입니다.

    다음 단계에서는 삭제된 코드 대신 새로운 두 줄의 코드를 추가합니다.

  2. 단추 클릭 이벤트 메서드 내에서 ArrayList 인스턴스를 Session에 할당하는 코드를 foreach 루프 바로 뒤의 바깥쪽에 추가합니다.

<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>변수 이름을 추가된 Session의 문자열 식별자로 사용할 수 있습니다.</p></td>
</tr>
</tbody>
</table>

``` vb
Session("myArrayList") = myArrayList
```

``` csharp
Session["arrayList"] = arrayList;
```
  1. ConfigureCrystalReports() 메서드 호출

    이 호출에서는 ArrayList 인스턴스를 검색하여 보고서에 적용하고 이 보고서를 CrystalReportViewer 컨트롤에 바인딩합니다.

    ConfigureCrystalReports()
    
    ConfigureCrystalReports();
    

이제 프로젝트를 빌드하고 실행하여 매개 변수 필드가 제대로 재설정되었는지 확인할 준비가 되었습니다.

Note참고

상태를 유지하기 위한 또 다른 방법으로 ReportDocument 인스턴스를 유지할 수도 있습니다. ReportDocument 인스턴스를 세션에 유지하는 방법에 대한 자세한 내용은 "자습서: Session을 사용하여 ReportDocument 개체 모델 유지" 자습서를 참조하십시오.

defaultParameterValuesList ListBox 컨트롤이 채워졌는지 테스트하려면

  1. 빌드 메뉴에서 솔루션 빌드를 선택합니다.

  2. 빌드 오류가 발생하면 바로 수정합니다.

  3. 디버그 메뉴에서 시작을 클릭합니다.

  4. ListBox 컨트롤에서 Shift 키를 누른 채로 목록의 도시를 모두 선택합니다.

  5. 보고서 다시 표시를 클릭합니다.

    페이지가 다시 로드되고 모든 도시의 모든 고객에 대한 고객 레코드가 표시됩니다. 이는 여러 페이지로 구성된 크기가 큰 보고서입니다.

  6. CrystalReportViewer 도구 모음에서 다음 페이지를 클릭합니다.

  7. 이제는 선택한 도시의 목록이 유지됩니다. 보고서의 2페이지가 표시됩니다.

  8. Visual Studio로 돌아간 다음 중지를 클릭하여 디버그 모드를 종료합니다.