Shoeisha Technology Media

CodeZine(コードジン)

記事種別から探す

5分でわかるActiveReports帳票-改ページ制御と多段組レイアウト(2007年度版)

ActiveReports for .NET 3.0Jで作るサンプル帳票

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2007/10/05 14:00

ダウンロード 使用データ (1013.0 B)

 本連載では帳票作成コンポーネント「ActiveReports for .NET 3.0J」を使って帳票アプリケーションを作成していきます。今回は改ページ時のセクション制御方法や、多段組レイアウトについて解説していきます。

目次
編集部注

 本稿の内容を増補改訂したアップデート版が提供されています。詳しくは連載の目次「5分でわかるActiveReports帳票」をご参照ください。

はじめに

 ActiveReports for .NET(以下ActiveReports)は、Visual Studioと統合された使いやすいレポートデザイナや、高機能なレポートビューア、多彩な出力形態をサポートする帳票作成コンポーネントです。今回は前回に引き続きActiveReports帳票の改ページ制御と、多段組レイアウト帳票について紹介していきます。

これまでの記事

対象読者

  • Visual Basic 2005またはVisual C# 2005を使ってプログラムを作ったことのある方。
  • 帳票作成ツールに興味のある方。

必要な環境

(注:Express EditionではActiveReportsをインストールできません)
  • Visual Studio 2005、Visual Studio .NET 2003でプログラムが作れる環境。

 本記事のサンプルコードはC# 2.0/Visual Basic 2005で記述しています。

改ページ制御について

最終的な完成イメージ

 今回は、改ページの制御について説明していきます。前半は前回のサンプルを少し変えた、以下のような帳票を例に解説を進めていきます。

「注文集計表2」帳票
「注文集計表2」帳票

 出力項目は、前回と同じく「月内での注文番号単位の小計・日単位の小計」「月間の注文合計・宅配料金・値引料金の合計」です。

 ただし、Detailセクションの高さが低いままだと改ページ制御について特に意識していなくてもうまく用紙に収まってしまうことが多いため、今回はあえてセクションの高さを広げるためにDetailセクションのレイアウトへ「商品コードのバーコード」を追加しています。

セクション単位での改ページ設定

 前回はPageBreakコントロールを利用した改ページを主に紹介しましたが、今回はセクションに用意されたプロパティを利用した改ページの制御を中心に解説していきます。

 セクション出力前後のタイミングで改ページ制御を行うには、各セクションのNewPageプロパティを利用します。NewPageプロパティには、None、Before、After、BeforeAfterのいずれかを設定できます。

NewPageプロパティに設定可能な値
説明
None セクション出力のタイミングでは改ページしない
Before セクション出力前に改ページする
After セクション出力後に改ページする
BeforeAfter セクション出力前と出力後の両方で改ページする

セクションがページ区切りで分割されるのを防ぐ

 ActiveReportsでは用紙に対して各セクションを順番に出力していくので、ページの最後で残りサイズより大きなセクションを出力すると、セクションが2ページにまたがって出力されてしまいます。

明細が切れた注文集計表
明細が切れた注文集計表

 このような場合、Detailセクションまたはグループヘッダ/フッタセクションのKeepTogetherプロパティを設定することで、ページ区切りによってセクション出力が分割されるのを避けることができます。

 KeepTogetherプロパティをTrueに設定すると、ActiveReportsはセクションの出力前に残り用紙サイズを判断し、サイズ不足でセクションが切れてしまう場合には改ページしてからセクションを出力します。

 なお、ページヘッダとページフッタにはKeepTogetherプロパティが存在しません。ActiveReportsでは、各ページのページヘッダとページフッタの領域が最初に確保され、残りの領域に対して他のセクションが配置されていきます。ページヘッダとページフッタの高さの合計が用紙サイズよりも大きくなってしまうと、実行時にエラーが発生するので注意してください。

グループヘッダを毎ページ出力する

 グループヘッダのセクションは通常、グループの出力ごとに1度だけ出力されます。これを毎ページ出力させたい場合は、グループヘッダのRepeatStyleプロパティを「OnPage」または「OnPageIncludeNoDetail」に設定します。

 設定値にOnPageを設定すると、そのページに1件以上detailセクションが出力される場合のみグループヘッダが出力されます。OnPageIncludeNoDetailに設定すると、detailセクションが出力されない(=グループフッタのみ出力される)ケースでもグループヘッダが表示されます。

RepeatStyleプロパティに設定可能な値
説明
None グループヘッダは最初の1回だけ出力する
OnPage 新しいページごとにグループヘッダを出力する
OnColumn 新しいカラムごとにグループヘッダを出力する
All 新しいページまたはカラムごとにグループヘッダセクションを繰り返す
OnPageIncludeNoDetail 関連するdetailセクションまたはグループフッタを含むページごとにグループヘッダを出力する

グループ化して改ページする

 セクションの大きさによっては、以下のようにグループヘッダだけが前ページに出力され、detailセクションから次のページ出力が始まってしまうことがあります。グループヘッダを、detaliセクションやグループフッタと1つのブロックとして同一ページに出力するためには、グループヘッダのGroupKeepTogetherプロパティを設定します。

グループヘッダだけが最後の行に来てしまった注文集計表
グループヘッダだけが最後の行に来てしまった注文集計表
GroupKeepTogetherプロパティに設定可能な値
説明
None グループヘッダの直後で改ページ可能
FirstDetail グループヘッダを同じページまたはカラムの最初の詳細セクションと共に出力する
All グループヘッダ、詳細、グループフッタの各セクションを同じページに出力する
グループヘッダが次ページへ移動された注文集計表
グループヘッダが次ページへ移動された注文集計表

 このサンプルでは、注文番号グループヘッダセクションのGroupKeepTogetherプロパティをFirstDetailに設定し、ヘッダは必ず明細行と一緒に表示するよう制御しています。


  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • 宮本奈紗(ミヤモトナサ)

    株式会社システムインテグレータ ERPソリューション部所属。 ERPシステムの設計・開発に従事。業務でActiveReportsを使用。

  • 渡辺俊史(ワタナベトシフミ)

    株式会社システムインテグレータ パッケージ開発部所属。ECサイト構築パッケージの設計・開発に従事。VSUG(Visual Studio User Group) データベース・データアクセスフォーラムリーダー。 blog:t.watanabe weblog

バックナンバー

連載:5分でわかるActiveReports帳票

もっと読む

All contents copyright © 2005-2017 Shoeisha Co., Ltd. All rights reserved. ver.1.5