セクションレポートにおいて、グループフッタを毎ページに出力する方法は?

文書番号 : 37780     文書種別 : 使用方法     登録日 : 2015/10/16     最終更新日 : 2015/10/16
文書を印刷する
対象製品
ActiveReports for .NET 9.0J
詳細
セクションレポートのグループヘッダの場合、RepeatStyleプロパティを"OnPageIncludeNoDetail"などに設定すると、そのグループヘッダは基本的に毎ページに出力されます。

しかしながら、グループフッタにはRepeatStyleプロパティのような機能が用意されておりません。そのため、一つのグループが複数ページに渡った場合にもグループフッタを毎ページに出力する、といった動作には対応しておりません。

グループフッタそのものではなく、グループ単位のページ数や集計値のような、「グループフッタに出力する情報」をページの下部に出力する方法としては、『グループヘッダ上に出力したデータを、ページフッタ上に読み込む方法』が考えられます。詳しくは、以下の内容をご覧ください。



毎ページの下部に出力されるセクションはページフッタのみですので、これを利用します。ただし、ページフッタ上にはデータとバインドしたコントロールを配置できませんので、コード上でデータをセットします。
この方法は、イベントの発生順序を利用した方法なので、レポートの構成によっては適用できない場合があります。また、グループヘッダを毎ページに出力するために、グループヘッダのRepeatStyleプロパティを"OnPageIncludeNoDetail"に設定する必要があります。

具体的には、以下のような手順になります。
  1. ページフッタ上にReportInfoコントロールを1つ配置し、以下のようにプロパティを設定します。
    FormatStringプロパティ:{PageCount}
    Visibleプロパティ:False
    このコントロールは、ページフッタのBeforePrintイベントを最後に発生させるためのコントロールであり、レポート上には出力する必要はありません。

  2. グループヘッダ上に、出力したいフィールドにバインドしたTextBoxコントロール(TextBox1)を配置します。VisibleプロパティはFalseに設定し、表示されないようにしておきます。
    グループヘッダ/フッタ上に配置できるコントロールは、そのグループ内で変化しないデータ(グループ化のキーとなる値)にバインドされたものか、Summary***プロパティを使用してグループ単位の集計を行うコントロールのみです。レコード単位で変化するデータをバインドさせた場合、ページヘッダ/フッタセクションと同様、予想と異なる結果になることがあります。

  3. ページフッタ上にTextBoxコントロール(TextBox2)を配置します。

  4. グループヘッダ上に出力されたデータを、配列変数に保存し、ページフッタ上のTextBoxにセットするコードをそれぞれのセクションのBeforePrintイベントに追加します。

    ◆サンプルコード(VB.NET)
    Private Data1(100) As String
    Private i As Integer = 0
    Private j As Integer = 0

    Private Sub GroupHeader1_BeforePrint(sender As Object, e As EventArgs) _
      Handles GroupHeader1.BeforePrint

      ' データを配列変数に保存します。
      Data1(i) = Me.TextBox1.Text
      i += 1
    End Sub

    Private Sub PageFooter_BeforePrint(sender As Object, e As EventArgs) _
      Handles PageFooter.BeforePrint

      ' 保存したデータをTextBoxにセットします。
      Me.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 セクションレポート デザイン・レイアウト