サポート&サービス

Home > サポート&サービス > テクニカルサポート > ナレッジベース

テクニカルサポート

製品に関する技術的なサービスを提供しています。製品別の技術情報(ナレッジベース)および、対応環境情報をご覧いただけます。また、E-mailによるテクニカルサポートのお申し込みもこちらで受け付けています。

ComponentOne サブスクリプション製品をご購入された方

サブスクリプションにて、ComponentOne製品(ComponentOne Studio、Wijmo、Xuni)をご購入された方は、下記のComponentOne Studioサイトからユーザー登録をお願いいたします。

ComponentOne サブスクリプション製品のユーザー登録を行う

ナレッジベース

複数のレポートを合成して、一つのレポートにする方法は?
文書番号 : 39678     文書種別 : HowTo
登録日 : 2017/02/21     最終更新日 : 2017/10/12
文書を印刷する
対象製品
ActiveReports for .NET 11.0J
詳細
異なるレポートを合成してひとつのレポートにする方法は、レポートの形式によって実現可否・方法が異なります。
詳細については、以下の内容をご覧ください。


セクションレポートの場合

セクションレポートの場合、異なるレポートを合成して1つのレポートとするにはいくつかの方法があります。
  1. サブレポートとして構成する方法
  2. ページ単位で追加・挿入する方法
  3. ページ同士を重ね合わせる方法
詳細については、以下の内容をご覧ください。
  1. サブレポートとして構成する方法
    SubReportコントロールを使用することで、セクションレポート内に別のセクションレポートを埋め込むことが可能です。

    サブレポートの使用方法については、製品ヘルプの以下のトピックをご覧ください。

    ActiveReportsユーザーガイド
     - 概念
      - セクションレポートの概念
       - セクションレポートのレポートコントロール
        - SubReport
     - 基本操作
      - セクションレポートの基本操作
       - サブレポートの作成
     - サンプルとチュートリアル
      - サンプル
       - セクションレポートのサンプル(Standard)
        - Layout
         - サブレポート サンプル
      - チュートリアル
       - セクションレポートのチュートリアル
        - レイアウト
         - サブレポート - XMLデータ
         - サブレポート - 実行時のデータソース
        - スクリプト
         - スクリプトとサブレポート
        - パラメータ
         - サブレポートでパラメータの使用

    なお、サブレポート自体は、親レポート内のコントロールの一つに過ぎません。そのため、サブレポートは基本的に「ページ」という概念から切り離されています。サブレポート側にページヘッダ/フッタを定義しても、それらが親レポート側に表示されないのはそのためです。

    したがいまして、サブレポートにページに依存する要素(例:ページ数)は含められません。あらかじめご注意ください。(詳細については、製品ヘルプの「概念(SubReport)」をご覧ください。)

    また、サブレポートとして設定できるのは、セクションレポートのみです。ページレポートやRDLレポートをサブレポートとして埋め込むことはできません。


  2. ページ単位で追加・挿入する方法
    セクションレポートの場合、レポートの生成結果は、Document.Pagesプロパティ(PagesCollectionクラス)にページ単位で格納されています。

    PagesCollectionクラスのAddやAddRange、InsertやInsertRangeメソッドを使用することで、生成済みのページを直接操作し、ページ単位で追加・挿入することが可能です。

    ■イメージ図
    ページ単位で追加・挿入する方法

    ◆サンプルコード(VB.NET)
    Dim rpt1 As New SectionReport1
    Dim rpt2 As New SectionReport2

    ' それぞれのレポートを実行します。
    rpt1.Run(False)
    rpt2.Run(False)

    ' レポート「rpt1」の後ろに、レポート「rpt2」を追加します。
    For i As Integer = 0 To rpt2.Document.Pages.Count - 1
      rpt1.Document.Pages.Add(rpt2.Document.Pages(i).Clone())
    Next
    '' ※以下のようなコードでも同じ合成結果が得られます。
    'rpt1.Document.Pages.AddRange(rpt2.Document.Pages.Clone())


    ' 合成後のレポートをプレビュー表示します。
    Me.Viewer1.Document = rpt1.Document

    ◆サンプルコード(C#)
    SectionReport1 rpt1 = new SectionReport1();
    SectionReport2 rpt2 = new SectionReport2();

    // それぞれのレポートを実行します。
    rpt1.Run(false);
    rpt2.Run(false);

    // レポート「rpt1」の後ろに、レポート「rpt2」を追加します。
    for (int i = 0; i < rpt2.Document.Pages.Count; i++)
    {
      rpt1.Document.Pages.Add(rpt2.Document.Pages[i].Clone());
    }
    //// ※以下のようなコードでも同じ合成結果が得られます。
    //rpt1.Document.Pages.AddRange(
    //  (GrapeCity.ActiveReports.Document.Section.PagesCollection)
    //    rpt2.Document.Pages.Clone());


    // 合成後のレポートをプレビュー表示します。
    this.viewer1.Document = rpt1.Document;


    なお、合成した結果は、プレビュー表示するだけでなく、1つのレポートとしてエクスポートすることや印刷することも可能です。

    また、ページを挿入する位置や順番を調整すれば、両面印刷時の表面と裏面を別のレイアウトにすることや、最終ページから先頭ページへの逆順印刷することなども可能です。

    ただし、合成できるのはセクションレポート同士のみです。ページレポートやRDLレポートを合成することはできません。

    ※レポートにページ番号を出力している場合、合成前の各レポート内でのページ番号が出力されます。合成後の全体を通したページ番号を出力したい場合は、関連情報の「生成後のセクションレポートに文字列や図形を描画する方法は?」をご参照ください。


  3. ページ同士を重ね合わせる方法
    セクションレポートの場合、Document.Pagesプロパティに格納されているページ単位の生成結果に対して、Overlayメソッドを使用することで、別のページと重ね合わせることが可能です。

    ■イメージ図
    ページ同士を重ね合わせる方法

    ◆サンプルコード(VB.NET)
    Dim rpt1 As New SectionReport1
    Dim rpt2 As New SectionReport2

    ' それぞれのレポートを実行します。
    rpt1.Run(False)
    rpt2.Run(False)

    ' レポート「rpt1」の各ページに、レポート「rpt2」の1ページ目を重ね合わせます。
    For i As Integer = 0 To rpt1.Document.Pages.Count - 1
      rpt1.Document.Pages(i).Overlay(rpt2.Document.Pages(0).Clone())
    Next

    ' 合成後のレポートをプレビュー表示します。
    Me.Viewer1.Document = rpt1.Document

    ◆サンプルコード(C#)
    SectionReport1 rpt1 = new SectionReport1();
    SectionReport2 rpt2 = new SectionReport2();

    // それぞれのレポートを実行します。
    rpt1.Run(false);
    rpt2.Run(false);

    // レポート「rpt1」の各ページに、レポート「rpt2」の1ページ目を重ね合わせます。
    for (int i = 0; i < rpt1.Document.Pages.Count; i++)
    {
      rpt1.Document.Pages[i].Overlay(
        (GrapeCity.ActiveReports.Document.Section.Page)
          rpt2.Document.Pages[0].Clone());
    }

    // 合成後のレポートをプレビュー表示します。
    this.viewer1.Document = rpt1.Document;


    なお、合成した結果は、プレビュー表示するだけでなく、1つのレポートとしてエクスポートすることや印刷することも可能です。

    ただし、一度合成したページを分ける(重ね合わせる前に戻す)ことはできません。

    また、合成できるのはセクションレポート同士のみです。ページレポートやRDLレポートを合成することはできません。



ページレポートの場合

ページレポートには、別々のレポートを合成して1つのレポートとする機能・方法は用意されておりません。

なお、ページレポートの場合、1つのレポート内に複数のレイアウトを定義することは可能です。

ただし、この機能は、TableやListなどのデータ領域にレコードを出力する時、データが1ページに収まりきらず、複数のページにまたがって出力されるような状況で、2ページ目以降のレイアウトを変更したい場合に使用するものです。

■ページレポートで複数レイアウトを定義した時の出力例
ページレポートで複数レイアウトを定義した時の出力例

ページレポートで複数レイアウトを定義する方法やサンプルについては、製品ヘルプの以下のトピックをご覧ください。

ActiveReportsユーザーガイド
 - 概念
  - ActiveReports for .NETデザイナの使用
   - ページのタブ
  - レポートの種類
   - ページレポート
  - ページレポート/RDLレポートの概念
   - ページレポート/RDLレポートのレポートコントロール
    - OverflowPlaceHolder(ページレポートのみ)
 - サンプルとチュートリアル
  - サンプル
   - レポートギャラリー サンプル
    - 「Report¥Page Reportフォルダ」
     - 「Otherフォルダ」
      - 「SalesReport」
  - チュートリアル
   - ページレポート/RDLレポートのチュートリアル
    - レイアウト
     - 複数のページでデータのオーバーフロー(ページレポートのみ)



RDLレポートの場合

RDLレポートの場合、SubReportコントロールを使用することで、レポート上に別のレポートをサブレポートとして埋め込むことが可能です。

RDLレポートにおけるサブレポートの使用方法については、以下のヘルプトピックや技術資料をご覧ください。

ActiveReportsユーザーガイド
 - 概念
  - ページレポート/RDLレポートの概念
   - ページレポート/RDLレポートのレポートコントロール
    - Subreport(RDLレポートのみ)
 - サンプルとチュートリアル
  - サンプル
   - レポートギャラリー サンプル
    - 「Report¥RDL Reportフォルダ」
     - 「Othersフォルダ」
      - 「Seiseki_Main/Seiseki_Sub」
     - 「Reelsフォルダ」
      - 「CustomerOrders/CustomerOrdersCoupon」
  - チュートリアル
   - ページレポート/RDLレポートのチュートリアル
    - レイアウト
     - RDLレポートでのサブレポート(RDLレポートのみ)

CodeZine|5分でわかるActiveReports帳票|RDLレポート
※旧バージョンである 9.0J をベースとした技術資料ですが、現行バージョンでも有効な内容となっております。

なお、セクションレポートをサブレポートして設定することはできません。サブレポートとして設定できるのは、RDLレポートまたはページレポートのみです。
関連情報
キーワード
HowTo デザイン・レイアウト

この情報は、疑問・問題解決のお役に立ちましたか?

    


こちらに入力されたご質問には回答できませんので、製品に関するお問い合わせは、別途「E-mailサポート」をご利用ください。


※ 個人情報保護のため、個人情報の記入はご遠慮ください。

このページの先頭へ