本稿の内容を増補改訂したアップデート版が提供されています。詳しくは連載の目次「5分でわかるActiveReports帳票」をご参照ください。
はじめに
ActiveReports for .NET(以下ActiveReports)は、Visual Studioと統合された使いやすいレポートデザイナや、高機能なレポートビューア、多彩な出力形態をサポートする帳票作成コンポーネントです。今回は前回に引き続きActiveReports帳票の改ページ制御と、多段組レイアウト帳票について紹介していきます。
これまでの記事
対象読者
- Visual Basic 2005またはVisual C# 2005を使ってプログラムを作ったことのある方。
- 帳票作成ツールに興味のある方。
必要な環境
- Visual Studio 2005、Visual Studio .NET 2003でプログラムが作れる環境。
本記事のサンプルコードはC# 2.0/Visual Basic 2005で記述しています。
改ページ制御について
最終的な完成イメージ
今回は、改ページの制御について説明していきます。前半は前回のサンプルを少し変えた、以下のような帳票を例に解説を進めていきます。
出力項目は、前回と同じく「月内での注文番号単位の小計・日単位の小計」「月間の注文合計・宅配料金・値引料金の合計」です。
ただし、Detailセクションの高さが低いままだと改ページ制御について特に意識していなくてもうまく用紙に収まってしまうことが多いため、今回はあえてセクションの高さを広げるためにDetailセクションのレイアウトへ「商品コードのバーコード」を追加しています。
セクション単位での改ページ設定
前回はPageBreakコントロールを利用した改ページを主に紹介しましたが、今回はセクションに用意されたプロパティを利用した改ページの制御を中心に解説していきます。
セクション出力前後のタイミングで改ページ制御を行うには、各セクションのNewPageプロパティを利用します。NewPageプロパティには、None、Before、After、BeforeAfterのいずれかを設定できます。
値 | 説明 |
None | セクション出力のタイミングでは改ページしない |
Before | セクション出力前に改ページする |
After | セクション出力後に改ページする |
BeforeAfter | セクション出力前と出力後の両方で改ページする |
セクションがページ区切りで分割されるのを防ぐ
ActiveReportsでは用紙に対して各セクションを順番に出力していくので、ページの最後で残りサイズより大きなセクションを出力すると、セクションが2ページにまたがって出力されてしまいます。
このような場合、Detailセクションまたはグループヘッダ/フッタセクションのKeepTogetherプロパティを設定することで、ページ区切りによってセクション出力が分割されるのを避けることができます。
KeepTogetherプロパティをTrueに設定すると、ActiveReportsはセクションの出力前に残り用紙サイズを判断し、サイズ不足でセクションが切れてしまう場合には改ページしてからセクションを出力します。
なお、ページヘッダとページフッタにはKeepTogetherプロパティが存在しません。ActiveReportsでは、各ページのページヘッダとページフッタの領域が最初に確保され、残りの領域に対して他のセクションが配置されていきます。ページヘッダとページフッタの高さの合計が用紙サイズよりも大きくなってしまうと、実行時にエラーが発生するので注意してください。
グループヘッダを毎ページ出力する
グループヘッダのセクションは通常、グループの出力ごとに1度だけ出力されます。これを毎ページ出力させたい場合は、グループヘッダのRepeatStyleプロパティを「OnPage」または「OnPageIncludeNoDetail」に設定します。
設定値にOnPageを設定すると、そのページに1件以上detailセクションが出力される場合のみグループヘッダが出力されます。OnPageIncludeNoDetailに設定すると、detailセクションが出力されない(=グループフッタのみ出力される)ケースでもグループヘッダが表示されます。
値 | 説明 |
None | グループヘッダは最初の1回だけ出力する |
OnPage | 新しいページごとにグループヘッダを出力する |
OnColumn | 新しいカラムごとにグループヘッダを出力する |
All | 新しいページまたはカラムごとにグループヘッダセクションを繰り返す |
OnPageIncludeNoDetail | 関連するdetailセクションまたはグループフッタを含むページごとにグループヘッダを出力する |
グループ化して改ページする
セクションの大きさによっては、以下のようにグループヘッダだけが前ページに出力され、detailセクションから次のページ出力が始まってしまうことがあります。グループヘッダを、detaliセクションやグループフッタと1つのブロックとして同一ページに出力するためには、グループヘッダのGroupKeepTogetherプロパティを設定します。
値 | 説明 |
None | グループヘッダの直後で改ページ可能 |
FirstDetail | グループヘッダを同じページまたはカラムの最初の詳細セクションと共に出力する |
All | グループヘッダ、詳細、グループフッタの各セクションを同じページに出力する |
このサンプルでは、注文番号グループヘッダセクションのGroupKeepTogetherプロパティをFirstDetailに設定し、ヘッダは必ず明細行と一緒に表示するよう制御しています。