作成日: 2020/04/15 最終更新日: 2020/04/15
文書種別
使用方法
詳細
異なるレポートを合成してひとつのレポートにする方法は、レポートの形式によって実現可否・方法が異なります。
詳細については、以下の内容をご覧ください。
詳細については、以下の内容をご覧ください。
詳細については、以下の内容をご覧ください。
詳細については、以下の内容をご覧ください。
セクションレポートの場合
セクションレポートの場合、異なるレポートを合成して1つのレポートとするには以下の方法があります。詳細については、以下の内容をご覧ください。
- サブレポートとして構成する方法
SubReportコントロールを使用することで、セクションレポート内に別のセクションレポートを埋め込むことが可能です。
サブレポートの使用方法については、製品ヘルプの以下のトピックをご覧ください。
セクションレポートのレポートコントロール > SubReport
サブレポートの作成
サブレポート サンプル
サブレポート - XMLデータ
サブレポート - 実行時のデータソース
スクリプトとサブレポート
サブレポートでパラメータの使用
なお、サブレポート自体は、親レポート内のコントロールの一つに過ぎません。そのため、サブレポートは基本的に「ページ」という概念から切り離されています。サブレポート側にページヘッダ/フッタを定義しても、それらが親レポート側に表示されないのはそのためです。
したがいまして、サブレポートにページに依存する要素(例:ページ数)は含められません。あらかじめご注意ください。(詳細については、製品ヘルプの「概念(SubReport)」をご覧ください。)
また、サブレポートとして設定できるのは、セクションレポートのみです。ページレポートやRDLレポートをサブレポートとして埋め込むことはできません。 - ページ単位で追加・挿入する方法
セクションレポートの場合、レポートの生成結果は、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レポートを合成することはできません。
※レポートにページ番号を出力している場合、合成前の各レポート内でのページ番号が出力されます。合成後の全体を通したページ番号を出力したい場合は、関連情報の「生成後のセクションレポートに文字列や図形を描画する方法は?」をご参照ください。 - ページ同士を重ね合わせる方法
セクションレポートの場合、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レポートを合成することはできません。
ページレポート/RDLレポートの場合
セクションレポートの場合、異なるレポートを合成して1つのレポートとするには以下の方法があります。詳細については、以下の内容をご覧ください。
- サブレポートとして構成する方法
SubReportコントロールを使用することで、レポート内に別のレポートを埋め込むことが可能です。
ただし、ページレポート/RDLレポートにセクションレポートを埋め込むことはできません。
また、ページレポートにページレポートを埋め込むこともできません。メインのレポートがページレポートである場合、埋め込めるレポートはRDLレポートのみです。
サブレポートの使用方法については、製品ヘルプの以下のトピックをご覧ください。
ページレポート/RDLレポートのレポートコントロール > SubReport
RDLレポートでのサブレポート
- レポート単位で結合する方法
ReportCombinerクラスを使用することで、ページレポートおよびRDLレポートを1つのレポートに結合できます。
こちらの方法については、製品ヘルプの以下のトピックをご覧ください。
ページ/RDLレポートの結合
- 複数のレイアウトを定義する方法
レポートの合成とは異なりますが、ページレポートの場合、1つのレポート内に複数のレイアウトを定義することも可能です。
この機能は、TableやListなどのデータ領域にレコードを出力する時、データが1ページに収まりきらず、複数のページにまたがって出力されるような状況で、2ページ目以降のレイアウトを変更したい場合に使用するものです。
■ページレポートで複数レイアウトを定義した時の出力例
ページレポートで複数レイアウトを定義する方法については、製品ヘルプの以下のトピックをご覧ください。
ページのタブ
OverflowPlaceHolder(ページレポート)
複数のページでデータのオーバーフロー(ページレポートのみ)
関連情報
旧文書番号
85287