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