ListBox 선택 항목을 통해 매개 변수 설정
이 부분에서는 defaultParameterValuesListListBox 컨트롤에서 선택한 항목에 따라 보고서를 다시 표시하는 단추를 추가합니다. 이 단추의 이벤트 메서드에서 페이지를 처음 로드할 때 호출하는 것과 동일한 메서드인 SetCurrentValuesForParameterField()를 호출합니다. 그러나 이번에는 임의의 값(Paris 및 Tokyo)을 전달하는 대신 defaultParameterValuesListListBox 컨트롤에서 선택한 값을 전달합니다.
폼에서 redisplay Button을 만들고 구성하려면
- Web Form 또는 Windows Form을 엽니다.
- 보기 메뉴에서 디자이너를 클릭합니다.
- 도구 상자에서 Button 컨트롤을 Listbox 컨트롤 오른쪽으로 끕니다.
- Button 컨트롤을 클릭하여 선택합니다.
- 속성 창에서 다음을 수행합니다.
- ID 또는 Name을 "redisplay"로 설정합니다.
- Text를 "보고서 다시 표시"로 설정합니다.
웹 프로젝트에서 redisplay Button의 클릭 이벤트 메서드를 만들려면
이제 ListBox 컨트롤에서 선택한 항목을 확인하여 SetCurrentValuesForParameterField() 메서드로 전달하는 단추 클릭 이벤트 메서드를 만들 준비가 되었습니다.
웹 프로젝트와 Windows 프로젝트 간에 코드가 조금 다르므로 아래에서 웹 또는 Windows에 해당하는 절차만 수행합니다.
보고서 다시 표시 단추를 두 번 클릭합니다.
자동 생성된 redisplay_Click() 이벤트 메서드가 있는 코드 숨김 클래스의 위치로 이동됩니다.
클래스 서명 위에 System.Web.UI.WebControls 네임스페이스에 대한 "Imports" [Visual Basic] 또는 "using" [C#] 선언이 없으면 클래스 위에 해당 선언을 추가합니다.
``` vb
Imports System.Web.UI.WebControls
```
``` csharp
using System.Web.UI.WebControls;
```
방금 자동 생성된 redisplay_Click() 이벤트 메서드 내에서 ArrayList를 선언하고 인스턴스화합니다.
Dim myArrayList As ArrayList = New ArrayList()
ArrayList arrayList = new ArrayList();
defaultParameterValuesList Listbox의 Items 속성에서 각 ListItem 인스턴스를 가져오는 foreach 루프를 만듭니다.
For Each item As ListItem In defaultParameterValuesList.Items Next
foreach(ListItem item in defaultParameterValuesList.Items) { }
foreach 루프 안에 현재 Item 인스턴스의 Selected 속성이 True로 설정되었는지 확인하는 중첩 조건 블록을 만듭니다.
If item.Selected Then End If
if(item.Selected) { }
조건 블록 안에서 Item 인스턴스의 Value 속성을 ArrayList 인스턴스에 추가합니다.
myArrayList.Add(item.Value)
arrayList.Add(item.Value);
조건 블록과 foreach 루프 밖에서 CustomersByCity 보고서의 파일 디렉터리 경로를 CrystalReportViewer 클래스의 ReportSource 속성에 다시 바인딩합니다.
참고
아래에 나와 있는 파일 디렉터리 경로는 Visual Studio 프로젝트에 사용되는 것입니다. “프로젝트 이름”을 웹 사이트의 이름으로 바꾸고, “사용자 이름”을 사용자의 로그온 이름으로 바꿉니다.
웹 사이트 프로젝트의 기본 경로는 다음과 같습니다.
myCrystalReportViewer.ReportSource = "C:\WebSites\ ProjectName\CustomersByCity.rpt"
crystalReportViewer.ReportSource = "C:\\WebSites\\ ProjectName\\CustomersByCity.rpt";
CrystalReportViewer 컨트롤의 ParameterFieldInfo 속성에서 ParameterFields 인스턴스를 가져옵니다.
Dim myParameterFields As ParameterFields = myCrystalReportViewer.ParameterFieldInfo
ParameterFields parameterFields = crystalReportViewer.ParameterFieldInfo;
ParameterFields 및 ArrayList 인스턴스를 SetCurrentValuesForParameterField() 메서드에 전달합니다.
SetCurrentValuesForParameterField(myParameterFields, myArrayList)
SetCurrentValuesForParameterField(parameterFields, arrayList);
Windows 프로젝트에서 redisplay Button의 클릭 이벤트 메서드를 만들려면
- redisplay Button 컨트롤을 두 번 클릭합니다.
자동 생성된 redisplay\_Click() 이벤트 메서드가 있는 코드 숨김 클래스의 위치로 이동됩니다.
방금 자동 생성된 redisplay_Click() 이벤트 메서드 내에서 ArrayList를 선언하고 인스턴스화합니다.
Dim myArrayList As ArrayList = New ArrayList()
ArrayList arrayList = new ArrayList();
defaultParameterValuesList Listbox의 SelectedItems 속성에서 각 항목을 문자열로 가져오는 foreach 루프를 만듭니다.
For Each item As String In defaultParameterValuesList.SelectedItems Next
foreach(string item in defaultParameterValuesList.SelectedItems) { }
foreach 루프 안에서 item 문자열 인스턴스를 ArrayList 인스턴스에 추가합니다.
myArrayList.Add(item)
arrayList.Add(item);
foreach 루프 밖에서 CustomersByCity 보고서의 파일 디렉터리 경로를 CrystalReportViewer 클래스의 ReportSource 속성에 다시 바인딩합니다.
<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>아래에 나와 있는 파일 디렉터리 경로는 Visual Studio 프로젝트에 사용되는 것입니다. “프로젝트 이름”을 Windows 프로젝트의 이름으로 바꾸고, “사용자 이름”을 사용자의 로그온 이름으로 바꿉니다.</p></td>
</tr>
</tbody>
</table>
Windows 프로젝트의 기본 경로는 다음과 같습니다.
``` vb
myCrystalReportViewer.ReportSource = "C:\Documents and Settings\UserName\My Documents\Visual Studio\Projects\ProjectName\CustomersByCity.rpt"
```
``` csharp
crystalReportViewer.ReportSource = "C:\\Documents and Settings\\UserName\\My Documents\\Visual Studio\\Projects\\ProjectName\\CustomersByCity.rpt";
```
CrystalReportViewer 컨트롤의 ParameterFieldInfo 속성에서 ParameterFields 인스턴스를 가져옵니다.
Dim myParameterFields As ParameterFields = myCrystalReportViewer.ParameterFieldInfo
ParameterFields parameterFields = crystalReportViewer.ParameterFieldInfo;
ParameterFields 및 ArrayList 인스턴스를 SetCurrentValuesForParameterField() 메서드에 전달합니다.
SetCurrentValuesForParameterField(myParameterFields, myArrayList)
SetCurrentValuesForParameterField(parameterFields, arrayList);
defaultParameterValuesList ListBox 컨트롤이 채워졌는지 테스트하려면
ListBox 컨트롤에서 선택한 값을 매개 변수 필드의 현재 값으로 적용했으므로 이제 보고서를 다시 표시할 수 있습니다.
이제 프로젝트를 빌드하고 실행하여 매개 변수 필드가 제대로 재설정되었는지 확인할 준비가 되었습니다.
빌드 메뉴에서 솔루션 빌드를 선택합니다.
빌드 오류가 발생하면 바로 수정합니다.
디버그 메뉴에서 시작을 클릭합니다.
ListBox 컨트롤에서 Ctrl 키를 누른 채로 목록의 다른 도시를 선택합니다.
보고서 다시 표시 단추를 클릭합니다.
페이지가 다시 로드되고 방금 목록에서 선택한 도시에 살고 있는 고객에 대한 고객 레코드가 표시됩니다.
Visual Studio로 돌아간 다음 중지를 클릭하여 디버그 모드를 종료합니다.