次の方法で共有


レポートのバインド

「プロジェクトの設定」の指示に従ってこのチュートリアルの準備をするときに、CrystalReportViewer コントロールを Web フォームに配置しました。ただし、レポート パーツを表示するには、CrystalReportPartsViewer コントロールを使用する必要があります。

ここでは、Customers レポートをインスタンス化し、これを CrystalReportPartsViewer コントロールにバインドします。次に、前の手順で作成したレポート パーツがレポートに表示されるかどうかをテストします。

レポートをインスタンス化してバインドするには、次の 2 つの方法があります。

  • 埋め込みレポートとして。
  • 埋め込みでないレポートとして。

以下の手順のいずれかを選択します。

  • 埋め込みレポートを使用する場合は、次の手順に従って、レポートを埋め込みレポートとしてインスタンス化します。
  • 埋め込みでないレポートを使用する場合は、2 番目の手順に従って、レポートを埋め込みでないレポートとしてインスタンス化します。

「レポートのデータのフィルタ」に進みます。

Customers レポートを埋め込みレポートとしてインスタンス化して CrystalReportPartsViewer コントロールにバインドする

  1. Web フォームを開きます。

  2. [表示]メニューの[デザイナ]をクリックします。

  3. CrystalReportViewer コントロールを削除します。

  4. ツールボックスで Crystal Reports ノードを開き、CrystalReportPartsViewer コントロールを探します。

  5. CrystalReportPartsViewer コントロールを Web フォームにドラッグします。

  6. プロパティ ウィンドウで、ID プロパティを以下のように設定します。

    • Visual Basic Web サイトの場合は、ID プロパティに“myCrystalReportPartsViewer”と設定します。
    • C# Web サイトの場合は、ID プロパティに“crystalReportPartsViewer”と設定します。
  7. [表示]メニューから[コード]をクリックし、この Web フォームの分離コード クラスを表示します。

  8. 変数名 customerReport で、Customers レポートのラッパー クラスに新しいクラス レベルの宣言を追加します。アクセス修飾子を private に設定します。

    Private customersReport As Customers
    
    private Customers customersReport;
    
  9. ConfigureCrystalReports() メソッド内で、レポート ラッパー クラスをインスタンス化します。

    Note

    ConfigureCrystalReports() メソッドは「プロジェクトの設定」で作成されました。

    customersReport = New Customers()
    
    customersReport = new Customers();
    
  10. レポート インスタンス化の下にある行で、CrystalReportPartsViewer コントロールの ReportSource プロパティに、インスタンス化したレポート クラス(変数名は customerReport)をバインドします。

    myCrystalReportPartsViewer.ReportSource = customersReport
    
    crystalReportPartsViewer.ReportSource = customersReport;
    
    Note

    コントロールを各自の Web フォームまたは Windows フォームに追加したので、CrystalReportPartsViewer コントロールのインスタンスにコードでアクセスできます。IntelliSense が CrystalReportPartsViewer コントロール インスタンスを認識しない場合は、CrystalReportPartsViewer コントロールがクラス レベルの宣言としてこの分離コード クラスに追加されていることを確認します。

Customers レポートを埋め込みではないレポートとしてインスタンス化して CrystalReportPartsViewer コントロールにバインドする

これでプロジェクトをビルドして実行することができます。

  1. Web フォームを開きます。

  2. [表示]メニューの[コード]をクリックします。

  3. 変数名 customersReport で、ReportDocument レポートのラッパー クラスに新しいクラス レベルの宣言を追加します。アクセス修飾子を private に設定します。

``` vb
Private customersReport As ReportDocument
```

``` csharp
private ReportDocument customersReport;
```

<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>で &quot;Imports&quot; [Visual Basic] または &quot;using&quot; [C#] 宣言を追加しました。ReportDocument をインスタンス化して名前空間にレポートをロードする際は、レポートを埋め込まずに SDK を介してレポートにアクセスします。</p></td>
</tr>
</tbody>
</table>
  1. 「プロジェクトの設定」の手順で追加した ConfigureCrystalReports() メソッドで、ReportDocument クラスをインスタンス化します。

    customersReport = New ReportDocument()
    
    customersReport = new ReportDocument();
    
  2. 文字列変数を宣言して reportPath という名前をつけ、ローカル レポートの実行時パスを代入します。このパスは、Web サイトと Windows プロジェクトで異なります。

    • Web サイトでは、ローカル レポート ファイルの名前は文字列パラメータとして Server.MapPath() メソッドに渡されます。これによってローカル レポートは、実行時にハード ドライブのファイル ディレクトリ パスにマップされます。

      Dim reportPath As String = Server.MapPath("Customers.rpt")
      
      string reportPath = Server.MapPath("Customers.rpt");
      
    • Windows プロジェクトでは、バック スラッシュを使って、Application.StartupPath プロパティをローカル レポート ファイル名と連結します。これによって、レポートは同じディレクトリに Windows 実行ファイルとしてマップされます。

      Note

      コンパイル時に、実行ファイルを含むディレクトリにレポートをコピーします。

      Dim reportPath As String = Application.StartupPath & "\" & "Customers.rpt"
      
      string reportPath = Application.StartupPath + "\\" + "Customers.rpt";
      
  3. ReportDocument インスタンスの Load() メソッドを呼び出し、reportPath 文字列変数を渡します。

``` vb
customersReport.Load(reportPath)
```

``` csharp
customersReport.Load(reportPath);
```
  1. 次の行のレポートのロードの下で、CrystalReportPartsViewer の ReportSource プロパティを、ReportDocument インスタンスにバインドします。

    myCrystalReportPartsViewer.ReportSource = customersReport
    
    crystalReportPartsViewer.ReportSource = customersReport;
    

Customers レポートのロードをテストする

埋め込みレポートのクラスまたは ReportDocument クラスによる埋め込みではないレポートのどちらを選択してインスタンス化しているかに関係なく、使用する変数名は同じです(customersReport)。これによって、その後の手順で共通のコードを使用できます。

これでプロジェクトをビルドして実行することができます。この時点では、市パラメータ フィールドの値を設定するコードを書き込んでいないため、レポートのロードに失敗するはずです。“市”パラメータ フィールドには後で値を追加します。

  1. [ビルド]メニューの[ソリューションのビルド]をクリックします。

  2. ビルド エラーが発生した場合は、ここで修正します。

  3. [デバッグ]メニューの[開始]をクリックします。

    Customers レポートが Web ブラウザに表示されます。

  4. 国をクリックして地域のリストを表示します。

  5. 地域をクリックして、“顧客名”、“前年度取引高”および“市”フィールドを表示します。

  6. Visual Studio に戻り、[停止]ボタンをクリックして、デバッグ モードを終了します。