重複する値を表示させないようにする
今回のサンプル帳票レイアウトでは、注文番号と注文単位の小計値を明細の1行目に表示させ、2行目以降は何も表示していません。重複値の表示、非表示を切り替えるには、detailセクションのFormatイベントでTextBoxコントロールのVisibleプロパティを切り替えればよいのですが、以下のようにすることでコード追加が不要になります。
重複する項目を次の行に表示させないようにするには、初回だけ表示させたい列のTextBoxコントロールをグループヘッダに設定し、UnderlayNextプロパティにTrueを設定します。UnderlayNextプロパティをTrueに設定したセクションは、次のセクションの開始位置に重なって表示されるため、結果として1行目だけ集計値が表示されることになります。
なお、コードを追加して表示、非表示を切り替える方法はActiveReportsのコードスニペットに含まれているので、ぜひ試してみてください。
改ページ処理について
最後に、改ページの処理について簡単に説明します。出力結果が設定した用紙サイズに収まらない場合、ActiveReportsでは自動的に改ページが行われますが、帳票レイアウト側で明示的に改ページ位置を指定することもできます。
改ページを指定するにはPageBreakコントロールを使用する方法と、各レポートセクションのNewPageプロパティを設定する方法の2つがあります。
PageBreakコントロールを使った改ページ
PageBreakコントロールはMicrosoft Wordの[改ページの挿入]とほぼ同様の機能です。コントロールを配置した位置で、毎回改ページを行います。
PageBreakコントロールはセクション途中の改ページに使用するコントロールです。例えば、ページヘッダに印刷する画像サイズが大きいので、2ページに分けたい場合などに使用します。
ただ、最終ページであっても指定位置で改ページしてしまうため「セクションが終了したところで改ページする」といったケースにはあまり向いていません。
セクション単位で改ページを行うには後述するNewPageプロパティを使用するのが便利ですが、PageBreakコントロールを使う場合はFetchDataイベントにコードを追加してEnabledプロパティを制御するなどの方法があります。以下のコードでは、最終行だった場合(eArgs.EOFプロパティの値がTrue)、改ページを起こさないように制御しています。
private void NewActiveReport1_FetchData(object sender, DataDynamics.ActiveReports.ActiveReport.FetchEventArgs eArgs) { if (!eArgs.EOF) { this.pageBreak1.Enabled = true; } else { this.pageBreak1.Enabled = false; } }
Private Sub NewActiveReport1_FetchData(ByVal sender As System.Object, _ ByVal eArgs As DataDynamics.ActiveReports.ActiveReport3.FetchEventArgs) _ Handles MyBase.FetchData If Not eArgs.EOF Then PageBreak1.Enabled = True Else PageBreak1.Enabled = False End If End Sub
集計グループ単位での改ページ
グループヘッダ・グループフッタのNewPageプロパティを設定すると、集計グループの単位で改ページが行われます。NewPageプロパティにはNone、Before、After、BeforeAfterのいずれかを設定できます。
例えば、グループフッタのNewPageプロパティを「After」に設定すると、グループフッタが印刷されたあとで改ページしますが、PageBreakコントロールのように最後に空白ページが入ることはありません。
まとめ
ActiveReportsの集計機能はデータソースの変更をすることなく、Summaryプロパティを設定するだけで高度な集計処理を簡単に行うことができます。また、必要に応じてコードを追加することで、より柔軟なカスタマイズが可能となっています。
改ページ制御については簡単な機能紹介にとどまりましたが、次回は、より掘り下げたページ制御のノウハウや実際の帳票印刷などのテーマを取り上げる予定です。