다음을 통해 공유


Session 코드 추가

이 부분에서는 Session을 사용하여 변경된 보고서 정렬 순서를 유지하는 방법을 설명합니다. 사용자가 정렬 순서를 조정할 경우 Session을 확인하고 Session에 보고서 인스턴스를 바로 다시 로드하는 코드를 프로젝트를 설정할 때("프로젝트 설정" 참조) 만든 ConfigureCrystalReports() 메서드에 추가합니다.

ConfigureCrystalReports() 메서드에 Session 확인 코드를 추가하려면

  1. hierarchicalGroupingReport라는 Session 개체가 있는지 확인하는 if/else 조건 블록을 ConfigureCrystalReports() 메서드 안에 있는 기존 코드 앞에 삽입합니다.

    이 Session 개체에 대해 사용자가 원하는 식별자 이름을 사용할 수 있습니다. 보고서 인스턴스의 이름과 같은 고유한 식별자를 사용하십시오.

    If (Session("hierarchicalGroupingReport") Is Nothing) Then
    
    Else
    
    End If
    
    if(Session["hierarchicalGroupingReport"] == null)
    {
    }
    else
    {
    }
    
  2. 포함 보고서를 사용하는 경우 보고서를 선언하고 인스턴스화하는 코드 줄을 현재 위치에서 If 블록 안으로 이동합니다.

    If (Session("hierarchicalGroupingReport") Is Nothing) Then
    hierarchicalGroupingReport = New Hierarchical_Grouping()
    Else
    
    End If
    
    if (Session["hierarchicalGroupingReport"] == null)
    {
    hierarchicalGroupingReport = new Hierarchical_Grouping();
    }
    else
    {
    }
    
  3. 비포함 보고서를 사용하는 경우 보고서를 선언하여 인스턴스화하고 디렉터리 경로에서 보고서를 로드하는 코드 두 줄을 현재 위치에서 If 블록 안으로 이동합니다.

    Note참고

    이 예제에서는 Crystal Reports for Visual Studio 2008을 사용하는 것으로 가정합니다. 다른 버전을 사용하고 있는 경우에는 "샘플 보고서 디렉터리"를 참조하여 샘플 보고서의 올바른 경로를 확인하십시오.

    If (Session("hierarchicalGroupingReport") Is Nothing) Then
    hierarchicalGroupingReport = New ReportDocument()
    hierarchicalGroupingReport.Load("C:\Program Files\Microsoft Visual Studio 9.0\Crystal Reports\Samples\En\Reports\Feature Examples\Hierarchical Grouping.rpt")
    Else
    
    End If
    
    if(Session["hierarchicalGroupingReport"] == null)
    {
    hierarchicalGroupingReport = new ReportDocument();
    hierarchicalGroupingReport.Load("C:\Program Files\Microsoft Visual Studio 9.0\Crystal Reports\Samples\En\Reports\Feature Examples\Hierarchical Grouping.rpt");
    }
    else
    {
    }
    
  4. If 블록 안에서 보고서 변수 이름을 Session 식별자 문자열로 사용하여 보고서를 Session에 할당합니다.

``` vb
Session("hierarchicalGroupingReport") = hierarchicalGroupingReport
```

``` csharp
Session["hierarchicalGroupingReport"] = hierarchicalGroupingReport;
```

If 블록의 코딩이 완료되었습니다. Session에 보고서가 없으면 If 블록이 실행되고 Session에 보고서가 있으면 Else 블록이 실행됩니다. 즉, Else 블록의 목적은 Session에서 보고서를 검색하여 보고서 인스턴스로 가져오는 것입니다.
  1. Else 블록 내에서 Session에 저장된 보고서를 보고서 인스턴스에 할당합니다.
``` vb
hierarchicalGroupingReport = CType(Session("hierarchicalGroupingReport"), ReportDocument)
```

``` csharp
hierarchicalGroupingReport = (ReportDocument)Session["hierarchicalGroupingReport"];
```

<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은 일반 개체만 반환하므로 보고서를 사용자의 보고서 형식으로 캐스팅해야 합니다. 포함 보고서를 사용하는지 비포함 보고서를 사용하는지에 상관없이 검색된 개체를 ReportDocument 형식으로 캐스팅합니다.</p></td>
</tr>
</tbody>
</table>

조건 블록 외부의 아래 나머지 코드에서는 보고서 인스턴스를 CrystalReportViewer 컨트롤의 ReportSource 속성에 바인딩합니다.

프로젝트 설정("프로젝트 설정" 참조)에서는 페이지를 다시 로드할 때마다 ConfigureCrystalReports() 메서드를 호출했습니다. 따라서 이 메서드를 수정하면 새로 만들었거나 Session에 저장되어 있는 최신 보고서를 항상 검색하고 로드할 수 있습니다. 그러나 보고서 인스턴스를 실제로 업데이트하는 코드는 아직 작성하지 않았습니다. 다음 부분에서는 정렬 순서를 수정할 때마다 Session의 보고서 인스턴스를 업데이트합니다.

Session에서 sortOrderDescending_Click 이벤트 메서드에 대해 보고서 인스턴스를 업데이트하려면

  1. sortOrderDescending_Click() 이벤트 메서드에서 CrystalReportViewer 컨트롤을 보고서에 바인딩하는 마지막 코드 줄을 삭제합니다.

    그러면 정렬 순서 방향을 변경하는 코드 세 줄이 남습니다.

  2. 정렬 방향을 변경하는 코드 세 줄 아래에서 ConfigureCrystalReports() 메서드에 사용된 것과 동일한 식별자를 사용하여, 새 정렬 순서 방향으로 업데이트된 hierarchicalGroupingReport 인스턴스를 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>간단히 하려면 ConfigureCrystalReports() 메서드에서 이 코드 줄을 복사하여 붙여넣습니다.</p></td>
</tr>
</tbody>
</table>

``` vb
Session("hierarchicalGroupingReport") = hierarchicalGroupingReport
```

``` csharp
Session["hierarchicalGroupingReport"] = hierarchicalGroupingReport;
```
  1. 끝으로 ConfigureCrystalReports() 메서드에 대한 호출을 추가합니다. 이 메서드는 방금 업데이트한 Session에서 최신 hierarchicalGroupingReport 인스턴스를 가져와서 CrystalReportViewer 컨트롤에 바인딩합니다.
``` vb
ConfigureCrystalReports()
```

``` csharp
ConfigureCrystalReports();
```

이제 두 번째 이벤트 메서드에 대해서도 동일한 단계를 반복해야 합니다.

Session에서 sortOrderAscending_Click 이벤트 메서드에 대해 보고서 인스턴스를 업데이트하려면

  1. sortOrderAscending_Click() 이벤트 메서드에서 CrystalReportViewer 컨트롤을 보고서에 바인딩하는 마지막 코드 줄을 삭제합니다.

    그러면 정렬 순서 방향을 변경하는 코드 세 줄이 남습니다.

  2. 정렬 방향을 변경하는 코드 세 줄 아래에서 ConfigureCrystalReports() 메서드에 사용된 것과 동일한 식별자를 사용하여, 새 정렬 순서 방향으로 업데이트된 hierarchicalGroupingReport 인스턴스를 Session에 할당합니다.

간단히 하려면 ConfigureCrystalReports() 메서드에서 이 코드 줄을 복사하여 붙여넣습니다.

``` vb
Session("hierarchicalGroupingReport") = hierarchicalGroupingReport
```

``` csharp
Session["hierarchicalGroupingReport"] = hierarchicalGroupingReport;
```
  1. 마지막으로 ConfigureCrystalReports() 메서드에 대한 호출을 추가합니다. 이 메서드는 방금 업데이트한 Session에서 최신 hierarchicalGroupingReport 인스턴스를 가져와서 CrystalReportViewer 컨트롤에 바인딩합니다.

    ConfigureCrystalReports()
    
    ConfigureCrystalReports();
    

이제 변경된 정렬 순서가 성공적으로 유지되는지 테스트할 준비가 되었습니다.