내보내기를 수행하는 세 가지 메서드 만들기
이 부분에서는 내보내기를 수행하는 다음과 같은 세 가지 private 도우미 메서드를 만듭니다.
- ExportSetup()
- ExportSelection()
- ExportCompletion()
이러한 메서드는 이 자습서의 뒷부분에서 단추 클릭 이벤트 메서드를 통해 호출됩니다. 먼저 ExportSetup() 도우미 메서드를 만듭니다.
ExportSetup() 메서드를 만들려면
Web Form 또는 Windows Form을 엽니다.
보기 메뉴에서 코드를 클릭합니다.
클래스의 맨 위에 세 가지 클래스 선언을 추가합니다.
``` vb
Private exportPath As String
Private myDiskFileDestinationOptions As DiskFileDestinationOptions
Private myExportOptions As ExportOptions
```
``` csharp
private string exportPath;
private DiskFileDestinationOptions diskFileDestinationOptions;
private ExportOptions exportOptions;
```
나중에 ExportSetup() 메서드에서 이러한 도우미 클래스를 인스턴스화합니다.
반환 값이 없는 ExportSetup()라는 private 도우미 메서드를 클래스의 맨 아래에 만듭니다.
Public Sub ExportSetup() End Sub
private void ExportSetup() { }
메서드 안에서 exportPath 문자열 변수를 하드 드라이브의 루트 디렉터리로 설정합니다.
``` vb
exportPath = "C:\Exported\"
```
``` csharp
exportPath = "C:\\Exported\\";
```
<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>Exported 폴더를 웹 서버의 웹 디렉터리 내에 배치하려면 폴더 이름 앞에 Request.PhysicalApplicationPath 속성을 접두사로 추가합니다.</p></td>
</tr>
</tbody>
</table>
exportPath 문자열의 디렉터리가 이미 있는지 여부를 테스트하는 조건 블록을 만듭니다.
If Not System.IO.Directory.Exists(exportPath) Then End If
if (!System.IO.Directory.Exists(exportPath)) { }
조건 블록 안에서 System.IO.Directory의 CreateDirectory() 메서드를 호출하여 exportPath 문자열과 같은 이름의 디렉터리를 만듭니다.
``` vb
System.IO.Directory.CreateDirectory(exportPath)
```
``` csharp
System.IO.Directory.CreateDirectory(exportPath);
```
조건 블록 외부에서 DiskFileDesintationOptions 클래스를 인스턴스화합니다.
myDiskFileDestinationOptions = New DiskFileDestinationOptions()
diskFileDestinationOptions = new DiskFileDestinationOptions();
hierarchicalGroupingReport 인스턴스의 ExportOptions 속성으로 ExportOptions 인스턴스를 채웁니다.
``` vb
myExportOptions = hierarchicalGroupingReport.ExportOptions
```
``` csharp
exportOptions = hierarchicalGroupingReport.ExportOptions;
```
<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><a href="ms227453(v=vs.90).md">"프로젝트 설정"</a>의 <a href="ms227530(v=vs.90).md">"추가 설정 요구 사항"</a>에서 hierarchicalGroupingReport를 인스턴스화하고 이 인스턴스를 CrystalReportViewer 컨트롤에 바인딩했습니다.</p></td>
</tr>
</tbody>
</table>
ExportOptions 인스턴스의 ExportDestinationType 속성을 열거형 선택 항목 ExportDestinationType.DiskFile로 설정합니다.
myExportOptions.ExportDestinationType = ExportDestinationType.DiskFile
exportOptions.ExportDestinationType = ExportDestinationType.DiskFile;
Windows 프로젝트의 경우 ExportOptions 인스턴스의 ExportFormatOptions 속성 값을 지웁니다. 웹 사이트의 경우에는 클릭 이벤트가 발생할 때마다 변수가 자동으로 지워지므로 이 코드 줄이 필요하지 않습니다.
myExportOptions.ExportFormatOptions = Nothing
exportOptions.ExportFormatOptions = null;
이제 ExportSelection() 도우미 메서드를 만듭니다.
ExportSelection() 메서드를 만들려면
Web Form 또는 Windows Form을 엽니다.
보기 메뉴에서 코드를 클릭합니다.
내보내기 형식을 선택하지 않았는지 확인하는 데 사용되는 부울 선언을 클래스의 맨 위에 추가합니다.
Private selectedNoFormat As Boolean = False
private bool selectedNoFormat = false;
반환 값이 없는 ExportSelection()라는 private 도우미 메서드를 클래스의 맨 아래에 만듭니다.
``` vb
Public Sub ExportSelection()
End Sub
```
``` csharp
private void ExportSelection()
{
}
```
- 메서드 안에서 ExportFormatType 열거형의 멤버를 참조하는 "Select Case" [Visual Basic] 또는 "switch" [C#] 문을 만듭니다. 이 열거형은 이전 절차에서 만든 exportTypesList DropDownList 컨트롤의 SelectedIndex를 기반으로 합니다.
``` vb
Select Case exportTypesList.SelectedIndex
Case ExportFormatType.NoFormat
Case ExportFormatType.CrystalReport
Case ExportFormatType.RichText
Case ExportFormatType.WordForWindows
Case ExportFormatType.Excel
Case ExportFormatType.PortableDocFormat
Case ExportFormatType.HTML32
Case ExportFormatType.HTML40
End Select
```
``` csharp
switch ((ExportFormatType)exportTypesList.SelectedIndex)
{
case ExportFormatType.NoFormat:
break;
case ExportFormatType.CrystalReport:
break;
case ExportFormatType.RichText:
break;
case ExportFormatType.WordForWindows:
break;
case ExportFormatType.Excel:
break;
case ExportFormatType.PortableDocFormat:
break;
case ExportFormatType.HTML32:
break;
case ExportFormatType.HTML40:
break;
}
```
이제 ExportCompletion() 도우미 메서드를 만듭니다.
ExportCompletion() 메서드를 만들려면
Web Form 또는 Windows Form을 엽니다.
보기 메뉴에서 코드를 클릭합니다.
반환 값이 없는 ExportCompletion()라는 private 도우미 메서드를 클래스의 맨 아래에 만듭니다.
``` vb
Public Sub ExportCompletion()
End Sub
```
``` csharp
private void ExportCompletion()
{
}
```
"ex"라는 변수로 참조되는 Exception 클래스를 사용하여 메서드 안에 try/catch 블록을 만듭니다.
Try Catch ex As Exception End Try
try { } catch (Exception ex) { }
try 블록 안에서 부울 변수 selectedNoFormat을 테스트하는 조건 블록을 만듭니다.
If selectedNoFormat Then Else End If
if (selectedNoFormat) { } else { }
If 블록 안에서 message Label 컨트롤의 Text 속성을 MessageConstants 클래스의 FORMAT_NOT_SUPPORTED 상수로 설정합니다.
<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>이 자습서에 사용되는 MessageConstants 클래스는 <a href="ms227453(v=vs.90).md">"프로젝트 설정"</a>의 <a href="ms227530(v=vs.90).md">"추가 설정 요구 사항"</a>에서 만들었습니다.</p></td>
</tr>
</tbody>
</table>
``` vb
message.Text = MessageConstants.FORMAT_NOT_SUPPORTED
```
``` csharp
message.Text = MessageConstants.FORMAT_NOT_SUPPORTED;
```
- Else 블록 안에서 hierarchicalGroupingReport 인스턴스의 Export() 메서드를 호출합니다.
``` vb
hierarchicalGroupingReport.Export()
```
``` csharp
hierarchicalGroupingReport.Export();
```
Else 블록 안에서 message Label 컨트롤의 Text 속성을 MessageConstants 클래스의 SUCCESS 상수로 설정합니다.
message.Text = MessageConstants.SUCCESS
message.Text = MessageConstants.SUCCESS;
catch 블록 안에서 message Label 컨트롤의 Text 속성을 MessagesConstants 클래스의 FAILURE 상수로 설정한 다음 여기에 Exception 매개 변수의 Message 속성을 추가합니다.
message.Text = MessageConstants.FAILURE & ex.Message
message.Text = MessageConstants.FAILURE + ex.Message;
try/catch 블록 외부에서 message Label 컨트롤의 Visible 속성을 "True"로 설정합니다.
message.Visible = True
message.Visible = true;
Windows 프로젝트의 경우 selectedNoFormat 부울 변수를 false로 재설정합니다. 웹 사이트의 경우에는 클릭 이벤트가 발생할 때마다 변수가 False로 자동 재설정되므로 이 코드 줄이 필요하지 않습니다.
selectedNoFormat = False
selectedNoFormat = false;
지금까지 내보내기를 수행하는 세 가지 private 도우미 메서드를 모두 만들었습니다.