ActiveReports for .NET 18.0J
サブレポート - 実行時のデータソース
ActiveReportsユーザーガイド > サンプルとチュートリアル > チュートリアル > セクションレポートのチュートリアル > レイアウト > サブレポート - 実行時のデータソース

セクションレポートでは、Subreportコントロールを使用し、複数の子レポートを含むことができます。子レポート(サブレポート)は、親セクション(Subreportコントロールが配置されたセクション)が出力されるたびに実行されます。このチュートリアルでは、親レポートのデータからサブレポートのレコードソースを変更して、現在の情報を取得する方法について説明します。

このトピックでは、以下のタスクを行います。

メモ: このチュートリアルではNorthwindデータベースを使用しています。Northwind.mdbデータベース(..ActiveReportsNET18\Samples\Data\Nwind.mdb)へのアクセス権限が必要です。

チュートリアルを完了すると、次のレポートが作成されます。

デザイン時のレイアウト

実行時のレイアウト

Visual Studioプロジェクトに親レポートとサブレポートを追加する

  1. Visual Studioで新規プロジェクトを開きます。
  2. [プロジェクト]メニューから[新しい項目の追加]を選択します。
  3. [新しい項目を追加]ダイアログ から [ActiveReports 18.0 セクションレポート(コード)]を選択し、ファイル名を「rptMain」に変更します。
  4. [追加]のボタンをクリックします。
  5. [プロジェクト]メニューから[新しい項目の追加]を選択します。
  6. [新しい項目を追加]ダイアログ から [ActiveReports 18.0 セクションレポート(コード)]を選択し、ファイル名を「rptSub」に変更します。
  7. [追加]のボタンをクリックします。

詳細は、「クイックスタート」参照してください。

親レポートをデータソースに接続する

  1. Detailセクションのバンドから、[データソース]アイコンをクリックします。
  2. [レポートデータソース]ダイアログで、[接続文字列]の横にある[OLE DB]タブの[作成]ボタンをクリックします。 詳細は、「レポートとデータソースの連結」を参照してください。
  3. [データリンクプロパティ]ウィンドウで、[Microsoft Jet 4.0 OLE DB Provider]を選択し、[次へ]ボタンをクリックして、[接続]タブへ移動します。
  4. <...>をクリックし、Nwind.mdbへのアクセスパスを参照します。アクセスパスの選択が完了したら、[開く]をクリックします。
  5. [接続のテスト]ボタンをクリックし、データベースへの接続を確認します。
  6. [OK]をクリックし、[レポートデータソース]ダイアログに戻ります。[接続文字列]フィールドで、テキストが自動的に追加されます。
  7. [OLE DB]タブの[クエリ]フィールドに以下のSQLクエリを入力します。
    SQLクエリ
    コードのコピー
    SELECT * FROM Categories
  8. [OK] をクリックします。

親レポート(rptMain)のレイアウトを作成する

  1. デザイナ面より、グレーの領域をクリックし、[プロパティ]ウィンドウからPrintWidthプロパティを「5.75」に設定します。
  2. デザイナ面より、Detailセクションを選択し、[プロパティ]ウィンドウからCanShrinkプロパティを「True」に設定し、空白スペースを削除します。
  3. ツールボックスから、PageHeaderセクション上に「Label」コントロールをドラッグし、[プロパティ]ウィンドウから以下のプロパティを設定します。
    プロパティ名 プロパティの値
    Name lblProductsbyCategory
    Text カテゴリ別の製品
    Location 0, 0 in
    Size 5.75, 0.25 in
    Font Size 14
    Alignment Center
  4. ツールボックスから、Detailセクション上に以下のコントロールをドラッグし、[プロパティ]ウィンドウから以下のプロパティを設定します。

    TextBox1

        
    プロパティ名 プロパティの値
    Name txtCategoryID1
    DataField CategoryID
    Visible False

    TextBox2

        
    プロパティ名 プロパティの値
    Name txtCategoryName1
    DataField CategoryName
    Location 1.15, 0.05 in

    Label1

    プロパティ名 プロパティの値
    Name lblCategoryName
    Text カテゴリ名:
    Location 0, 0.05 in
    Size 0.75, 0.2 in
    Font Bold True

    Label2

    プロパティ名 プロパティの値
    Name lblProducts
    Text 製品:
    Location 2.4, 0.05 in
    Font Bold True

    Subreport

    プロパティ名 プロパティの値
    Name SubReport1
    Location 3, 0.05 in
    Size 2.25, 1 in

子レポートの(rptSub)レイアウトを作成する

  1. デザイナ面より、Detailセクションを選択し、[プロパティ]ウィンドウから以下のプロパティを設定します。
    プロパティ名 プロパティの値
    CanShrink True
    BackColor AliceBlue
    ヒント: レポートの最終的な出力結果に色を適用したくない場合であっても、サブレポートの背景に色を使用することで、レイアウト関連の問題を容易に見つけることができます。
  2. デザイナ面より、pageHeaderとpageFooterセクションを選択し、[削除]をクリックします。サブレポートはこのセクションを表示しないので、これらのセクションを削除すると処理時間を削減できます。
  3. ツールボックスから、Detailセクション上に[TextBox]コントロールをドラッグし、[プロパティ]ウィンドウから以下のプロパティを設定します。
    プロパティ名 プロパティの値
    DataField ProductName
    Name txtProductName
    Text 製品名
    Location 0, 0 in
    Size 2.25, 0.2 in

サブレポートのインスタンスを作成するコードを追加する

注意: Formatイベントでサブレポートの新しいインスタンスを作成しないでください。Formatを実行するごとに新しいサブレポートが作成されるので、大量のメモリが消費されます。

Visual Basic

  1. レポートのコードビューの上部左側のドロップダウンキーをクリックし、rptMainイベントを選択します。
  2. コードウィンドウの上部右側のドロップダウンキーをクリックし、ReportStartを選択し、レポートのReportStartイベントのイベント処理メソッドを作成します。
  3. ハンドラに以下のコードを追加し、サブレポートの新しいインスタンスを作成します。

 

Visual Basicコード(ReportStartイベントの上に貼り付けます)
コードのコピー
Private rpt As rptSub
Private childDataSource As New GrapeCity.ActiveReports.Data.OleDBDataSource()
Visual Basicコード(ReportStartイベント内に貼り付けます)
コードのコピー
rpt = New rptSub()

C#

  1. デザイナ面より、グレーの領域をクリックし、rptMainを選択します。
  2. [プロパティ]ウィンドウにあるイベントのアイコンをクリックし、レポートのイベントの一覧を表示します。
  3. ReportStartイベントをダブルクリックし、レポートのReportStartイベントのイベント処理メソッドを作成します。
  4. ハンドラに以下のコードを追加し、サブレポートの新しいインスタンスを作成します。

サンプルコードを示します。

C#コード(ReportStartイベントの上に貼り付けます)
コードのコピー
private rptSub rpt;
private GrapeCity.ActiveReports.Data.OleDBDataSource childDataSource = new GrapeCity.ActiveReports.Data.OleDBDataSource();
C#コード(ReportStartイベント内に貼り付けます)
コードのコピー
rpt = new rptSub();

子レポートにデータソースを割り当てるコードを追加する

  1. rptMainレポートのデザイナビューより、Detailセクションをダブルクリックし、Detail_Formatイベントのイベント処理メソッドを作成します。
  2. ハンドラにコードを追加し、以下の処理を実装します。
    • サブレポートのOleDBデータソースの接続文字列を設定する
    • 新しいデータソースにSQLクエリの設定と現在のレコードのCategoryIDを渡す
    • サブレポートをデータソースに接続する
    • rptSubをSubReportコントロールに割り当てる

Visual Basic

Visual Basicコード(Formatイベント内に貼り付けます)
コードのコピー
childDataSource.ConnectionString = CType(Me.DataSource, GrapeCity.ActiveReports.Data.OleDBDataSource).ConnectionString
childDataSource.SQL = "SELECT * FROM Products WHERE CategoryID = " + Me.txtCategoryID1.Value.ToString
rpt.DataSource = childDataSource
SubReport1.Report = rpt

C#

C#コード(Formatイベント内に貼り付けます)
コードのコピー
childDataSource.ConnectionString = ((GrapeCity.ActiveReports.Data.OleDBDataSource)this.DataSource).ConnectionString;
childDataSource.SQL = "SELECT * FROM Products WHERE CategoryID = " + this.txtCategoryID1.Value.ToString();
rpt.DataSource = childDataSource;
SubReport1.Report = rpt;

レポートを表示する

または