グループフッタを毎ページに出力する方法はありますか?
対象製品
ActiveReports for .NET 6.0J Professional
詳細
グループフッタには、グループヘッダのRepeatStyleプロパティのような機能が用意されておりません。そのため、一つのグループが複数ページに渡った場合に、グループフッタを毎ページに出力するといった動作には対応しておりません。
グループフッタそのものではなく、グループ単位のページ数や集計値のような、「グループフッタに出力する情報」をページの下部に出力する方法としては、下記のような方法が考えられます。
◆グループヘッダ上に出力したデータを、ページフッタ上に読み込む方法
毎ページの下部に出力されるセクションはページフッタのみですので、これを利用します。ただし、ページフッタ上にはデータとバインドしたコントロールを配置できませんので、コード上でデータをセットします。
※この方法は、イベントの発生順序を利用した方法なので、レポートの構成によっては適用できない場合があります。また、グループヘッダを毎ページに出力するために、グループヘッダのRepeatStyleプロパティを"OnPageIncludeNoDetail"に設定する必要があります。
具体的には、以下のような手順になります。
グループフッタそのものではなく、グループ単位のページ数や集計値のような、「グループフッタに出力する情報」をページの下部に出力する方法としては、下記のような方法が考えられます。
◆グループヘッダ上に出力したデータを、ページフッタ上に読み込む方法
毎ページの下部に出力されるセクションはページフッタのみですので、これを利用します。ただし、ページフッタ上にはデータとバインドしたコントロールを配置できませんので、コード上でデータをセットします。
※この方法は、イベントの発生順序を利用した方法なので、レポートの構成によっては適用できない場合があります。また、グループヘッダを毎ページに出力するために、グループヘッダのRepeatStyleプロパティを"OnPageIncludeNoDetail"に設定する必要があります。
具体的には、以下のような手順になります。
- ページフッタ上にTextBoxを1つ配置します。Summary***プロパティの設定は、製品ヘルプの「ページフッタにページ番号を設定する」で説明されている、総ページ数を出力する場合の設定にします。TextBoxのVisibleプロパティはFalseに設定し、表示されないようにしておきます。
(このTextBoxは、ページフッタのBeforePrintイベントを最後に発生させるためのコントロールであり、実際にはレポート上には出力されません。) - グループヘッダ上に、出力するデータにバインドされたTextBoxコントロール(TextBox1)を配置します。VisibleプロパティはFalseに設定し、表示されないようにしておきます。
※グループヘッダ/フッタ上に配置できるコントロールは、そのグループ内で変化しないデータ(グループ化のキーとなる値)にバインドされたものか、Summary***プロパティを使用してグループ単位の集計を行うコントロールのみです。レコード単位で変化するデータをバインドさせた場合、ページヘッダ/フッタセクションと同様、予想と異なる結果になることがあります。 - ページフッタ上にTextBoxコントロール(TextBox2)を配置します。
- グループヘッダ上に出力されたデータを、配列変数に保存し、ページフッタ上のTextBoxにセットするコードをそれぞれのセクションのBeforePrintイベントに追加します。
◆サンプルコード(VB.NET)
Dim Data1(100) As String
Private i As Integer = 0
Private j As Integer = 0
Private Sub GroupHeader1_BeforePrint(....)
' データを配列変数に保存します。
Data1(i) = TextBox1.Text
i += 1
End Sub
Private Sub PageFooter_BeforePrint(....)
' 保存したデータをTextBoxにセットします。
TextBox2.Text = Data1(j)
j += 1
End Sub
◆サンプルコード(C#)
string[] Data1 = new string[100];
int i = 0;
int j = 0;
private void groupHeader1_BeforePrint(object sender, EventArgs e)
{
// データを配列変数に保存します。
Data1[i] = this.textBox1.Text;
i += 1;
}
private void pageFooter_BeforePrint(object sender, EventArgs e)
{
// 保存したデータをTextBoxにセットします。
this.textBox2.Text = Data1[j];
j += 1;
}
関連情報
キーワード
HowTo デザイン・レイアウト
この文書は、以前は次のFAQ IDで公開されていました : 11888