次の方法で共有


ReportDocument にアップキャストする埋め込み Report クラスへのバインド

オブジェクト モデル

このレポートをバインドするシナリオは、「ReportDocument オブジェクト モデルによるレポートのバインド」を使用します。

レポートの場所

レポートはプロジェクトに埋め込まれます。

Note

本書の以前のバージョンでは、埋め込みレポートは“厳密に型指定された”レポートと呼ばれていました。Visual Studio プロジェクトに追加またはインポートされたレポートを意味する用語として、現在は“埋め込み”が使用されています。

説明

このレポートをバインドするシナリオは、「埋め込みレポート クラスへのバインド」のシナリオを拡張します。このシナリオでは、多くの埋め込みレポートをプロジェクトにバインドします。プロジェクトでは個別のコードを使用せず、1 つのコード共有セットを使用します。

このレポートをバインドするシナリオでは、多くの埋め込みレポートをプロジェクトに追加します。しかし、この埋め込みレポートは、CrystalReportViewer コントロールに直接バインドしません。代わりに、選択条件を使用するユーティリティ メソッドを実行し、埋め込みレポートの 1 つを選択します。このユーティリティはレポートを ReportDocument のインスタンスにアップキャストします。ReportDocument インスタンスはコントロールにバインドされます。

Note

ReportDocument はすべての埋め込みレポートに継承される基本クラスです。したがって、あらゆる埋め込みレポートは ReportDocument へのアップキャストが可能です。

長所

  • リファクタリングによるコードの改良:レポートをバインドするコードの共有セットにより、複数の埋め込みレポートの 1 つと対話できます。以前のシナリオでは、各埋め込みレポートごとに手動でコード化する必要があり、作業時間が増加する場合もありました。
  • 共有化によるコードの削減:ReportDocument のインスタンスに追加のコードを書き込むことができ、ReportDocument オブジェクト モデルと完全に対話できます。すべてのコードを一度書き込むだけで、ReportDocument インスタンスにアップキャストされる個々の埋め込みレポートにも継承されます。
  • 他のすべての長所については、「埋め込みレポート クラスへのバインド」を参照してください。

短所

  • 煩雑なメンテナンス:レポートを変更すると、アプリケーションの再コンパイルと再配布が必要になります。

ReportDocument にアップキャストされる埋め込みレポート クラスにバインドする

Note

この手順は、「プロジェクトの設定」で作成されたプロジェクトにのみ有効です。「プロジェクトの設定」では、この手順で必要な特定の名前空間の参照とコード設定が説明されており、この設定は、この手順を完了するために必須です。したがって、この手順を始める前にまず、「プロジェクトの設定」の手順を実行しておく必要があります。

  1. 2 つのサンプル レポートをプロジェクトに追加します。

  2. "Imports" [Visual Basic] 文または "using" [C#] 文を、CrystalDecisions.CrystalReports.Engine 名前空間クラスの先頭に追加します。

    Note

    ReportDocument クラスに名前空間の前置記号を付けずに使用するには、この名前空間を宣言する必要があります。これにより IntelliSense からアクセスできるようになります。

    Imports CrystalDecisions.CrystalReports.Engine
    
    using CrystalDecisions.CrystalReports.Engine;
    
  3. 次の方法で、プライベート ヘルパー メソッドをレポートの選択用に作成します。

    このメソッドでは、受け取った整数パラメータは "Select Case" [Visual Basic] 文または "switch" [C#] 文によって渡され、レポートの選択に使用されます。どちらの場合もインスタンス化され、特定のレポート(基本クラス ReportDocument にアップキャストされる)が返されます。

    Private Function ChooseReport(ByVal i As Integer) As ReportDocument
    Select Case i
    Case 1
    Dim chartReport As Chart = New Chart()
    Return CType(chartReport, ReportDocument)
    Case 2
    Dim hierarchicalGroupingReport As Hierarchical_Grouping
    = New Hierarchical_Grouping()
    Return CType(hierarchicalGroupingReport,
    ReportDocument)
    Case Else
    Dim worldSalesReport As World_Sales_Report = New
    World_Sales_Report()
    Return CType(worldSalesReport, ReportDocument)
    End Select
    End Function
    
    private ReportDocument ChooseReport(int i)
    {
    switch(i)
    {
    case 1:
    Chart chartReport = new Chart();
    return (ReportDocument)chartReport;
    case 2:
    Hierarchical_Grouping hierarchicalGroupingReport = new
    Hierarchical_Grouping();
    return (ReportDocument)hierarchicalGroupingReport;
    default:
    World_Sales_Report worldSalesReport = new
    World_Sales_Report ();
    return (ReportDocument)worldSalesReport;
    
    };
    }
    
  4. 「プロジェクトの設定」で作成した ConfigureCrystalReports() メソッド内では、既存のコードが削除され、以下の新しいコード行に置き換えられます。

  5. ReportDocument のインスタンスを宣言し、ChooseReport() メソッドを呼び出すことでインスタンスを操作し、最初のレポート Chart.rpt が選択されるように整数値 1 を渡します。

    Dim myReportDocument As ReportDocument = ChooseReport(1)
    
    ReportDocument reportDocument = ChooseReport(1);
    
  6. プレースホルダを作成し、ReportDocument インスタンスに対するコードを入れます。

この例では、レポート データは RecordSelectionFormula プロパティでフィルタできます。ReportDocument は実行可能な種々のレポートを表示するため、それに渡されるあらゆるレポートにフィルタが適用されます。ここでは、渡される文字列がありません。

<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 へのアップキャスト方法を示しており、複数のレポートに共通のコードを書くことができます。</p></td>
</tr>
</tbody>
</table>

``` vb
myReportDocument.RecordSelectionFormula = ""
```

``` csharp
reportDocument.RecordSelectionFormula = "";
```
  1. ReportDocument インスタンスを CrystalReportViewer コントロールの ReportSource プロパティに割り当てます。

    myCrystalReportViewer.ReportSource = myReportDocument
    
    crystalReportViewer.ReportSource = reportDocument;
    
  2. レポートを表示するには、プロジェクトをビルドおよび実行してください。

関連項目