レポートのバインドと値を入力したデータセットのデータソースの設定
このセクションでは、作成したレポートをインスタンス化し、レポートの DataSet に値を入力し、CrystalReportViewer コントロールにレポートを表示する方法を学習します。レポートに値を入力するには、データが入力された DataSet に SetDataSource プロパティを割り当てます。この DataSet は DataSetConfiguration クラスの CustomerDataSet プロパティから返されます。最後に、値を入力したレポートを CrystalReportViewer コントロールにバインドします。
レポートをインスタンス化してバインドするには、次の方法があります。
- 埋め込みレポートとして。
- 埋め込みでないレポートとして。
以下の手順のいずれかを選択します。
埋め込みでないレポートをインスタンス化して CrystalReportViewer コントロールにバインドする
Web フォームまたは Windows フォームを開きます。
[表示]メニューの[コード]をクリックします。
変数名 customerReport で、ReportDocument レポートのラッパー クラスに新しいクラス レベルの宣言を追加します。アクセス修飾子を private に設定します。
<table>
<colgroup>
<col style="width: 100%" />
</colgroup>
<thead>
<tr class="header">
<th><img src="images/w5dk7atd.alert_note(ja-jp,VS.90).gif" title="Note" alt="Note" class="note" />注</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><p>ReportDocument クラスは、CrystalDecisions.CrystalReports.Engine 名前空間に含まれます。この名前空間には、<a href="ms227453(v=vs.90).md">「プロジェクトの設定」</a>で "Imports"[Visual Basic] 宣言または "using"[C#] 宣言を追加しました。ReportDocument をインスタンス化して名前空間にレポートをロードする際は、レポートを埋め込まずに SDK を介してレポートにアクセスします。</p></td>
</tr>
</tbody>
</table>
``` vb
Private customerReport As ReportDocument
```
``` csharp
private ReportDocument customerReport;
```
「プロジェクトの設定」の手順で追加した ConfigureCrystalReports() メソッドで、ReportDocument クラスをインスタンス化します。
customerReport = New ReportDocument()
customerReport = new ReportDocument();
文字列変数を宣言して reportPath という名前をつけ、ローカル レポートの実行時パスを代入します。このパスは、Web サイトと Windows プロジェクトで異なります。
Web サイトでは、ローカル レポート ファイルの名前は文字列パラメータとして Server.MapPath() メソッドに渡されます。これによってローカル レポートは、実行時にハード ドライブのファイル ディレクトリ パスにマップされます。
Dim reportPath As String = Server.MapPath("Customer.rpt")
string reportPath = Server.MapPath("Customer.rpt");
Windows プロジェクトでは、バック スラッシュを使って、Application.StartupPath プロパティをローカル レポート ファイル名と連結します。これによって、レポートは同じディレクトリに Windows 実行ファイルとしてマップされます。
注
コンパイル時に、実行ファイルを含むディレクトリにレポートをコピーします。
Dim reportPath As String = Application.StartupPath & "\" & "Customer.rpt"
string reportPath = Application.StartupPath + "\\" + "Customer.rpt";
ReportDocument インスタンスの Load() メソッドを呼び出し、reportPath 文字列変数を渡します。
``` vb
customerReport.Load(reportPath)
```
``` csharp
customerReport.Load(reportPath);
```
DataSet を宣言して、それに DataSetConfiguration.CustomerDataSet property を割り当てます。
Dim myDataSet As DataSet = DataSetConfiguration.CustomerDataSet
DataSet dataSet = DataSetConfiguration.CustomerDataSet;
customerReport ReportDocument インスタンスの SetDataSource() メソッドを呼び出し、DataSet インスタンスを渡します。
``` vb
customerReport.SetDataSource(myDataSet)
```
``` csharp
customerReport.SetDataSource(dataSet);
```
次の行のレポートのロードの下で、CrystalReportViewer の ReportSource プロパティを、ReportDocument インスタンスにバインドします。
myCrystalReportViewer.ReportSource = customerReport
crystalReportViewer.ReportSource = customerReport;
埋め込みレポートをインスタンス化して CrystalReportViewer コントロールにバインドする
Web フォームまたは Windows フォームを開きます。
[表示]メニューの[コード]をクリックします。
クラス署名の上で、"Imports"[Visual Basic] または "using"[C#] 宣言を System.Data 名前空間のクラスの先頭に追加します(まだ追加されていない場合)。
``` vb
Imports System.Data
```
``` csharp
using System.Data;
```
変数名 customerReport で、Customer レポートのラッパー クラスに新しいクラス レベルの宣言を追加します。アクセス修飾子を private に設定します。
Private customerReport As Customer
private Customer customerReport;
ConfigureCrystalReports() メソッド内で、レポート ラッパー クラスをインスタンス化します。
注
ConfigureCrystalReports() メソッドは「プロジェクトの設定」で作成されました。
customerReport = New Customer()
customerReport = new Customer();
レポートをインスタンス化した次の行で、DataSet を宣言します。
このステップと次のステップでは、変数の宣言と割り当てを分離します。このチュートリアルにおける Web サイトのためのコードの追加では、DataSet を ASP.NET Cache オブジェクトにキャッシュするコード ブロックに変数の割り当てをリファクタするので、各コード行は 1 行ずつ独立して記述されます。
``` vb
Dim myDataSet As DataSet
```
``` csharp
DataSet dataSet;
```
DataSet インスタンスを DataSetConfiguration.CustomerDataSet プロパティに割り当てます。
myDataSet = DataSetConfiguration.CustomerDataSet
dataSet = DataSetConfiguration.CustomerDataSet;
Customerreport インスタンスの SetDataSource() メソッドを呼び出し、DataSet インスタンスを渡します。
``` vb
customerReport.SetDataSource(myDataSet)
```
``` csharp
customerReport.SetDataSource(dataSet);
```
CrystalReportViewer コントロールの ReportSource プロパティを CustomerReport インスタンスにバインドします。
myCrystalReportViewer.ReportSource = customerReport
crystalReportViewer.ReportSource = customerReport;
Customer レポートのロードおよびデータが入力された DataSet をテストする
これでプロジェクトをビルドして実行することができます。
- [ビルド]メニューの[ソリューションのビルド]をクリックします。
- ビルド エラーが発生した場合は、ここで修正します。
- Windows プロジェクトで埋め込みでないレポートを使用する場合、コンパイルされた Windows 実行ファイルを \bin\ [Visual Basic] または \bin\debug\ [C#] サブディレクトリ内で探し、レポートをそのサブディレクトリにコピーします。
注
埋め込みでないレポートが、実行時に Windows 実行ファイルによってロードされるようにするには、レポートを Windows 実行ファイルと同じディレクトリに格納する必要があります。
- [デバッグ]メニューの[開始]をクリックします。
- Customer レポートは、DataSet に格納されたデータを表示します。
- Visual Studio に戻り、[停止]ボタンをクリックして、デバッグ モードを終了します。
Windows プロジェクトを構築している場合は、これでチュートリアルは完了です。
Web サイトを構築する場合は、「Web サイトでのデータセットのキャッシュ 」に続きます。