より複雑なレイアウト:OverflowPlaceHolderの使用
基本的な使い方は以上ですが、より複雑なレポートを作成してみましょう。ここでは、以下のことを行います。
- OverflowPlaceHolderコントロールを使用して、表の部分を複数に分ける。
- 同一レポート内で複数のレイアウトを使用する。
OverflowPlaceHolderコントロール
OverflowPlaceHolderコントロールは、List、BandedList、Matrix、Tableなどのデータ領域について、FixedSizeプロパティに設定した範囲に出力するデータが収まりきらない時、その続きを表示する場所を指定するためのコントロールです。
通常、Listなどのデータ領域に表示するデータが1ページに収まりきらない場合、そのあふれた部分のデータは、次のページに同じレイアウトで表示することになります。これは、そのデータ領域に出力すべきデータがなくなるまで繰り返されます。
しかしながら、レポートの要求仕様によっては、データ領域にデータが収まりきらない時、ただ同じレイアウトをページごとに繰り返すのではなく、レイアウトを変えて出力したい場合もあると思われます。例えば2段組や3段組にする、最初のページとあふれたデータを出力する2ページ目以降のレイアウトを変更する、といったレイアウトが考えられます。
ページレポートの場合、同一レポート内に複数のレイアウトを定義することが可能であり、レイアウトをまたいでデータ領域とOverflowPlaceHolderを連結させることもできますので、こうしたレイアウトを実現できます。
データ領域に出力データが収まりきらなくなったら、同じレイアウトで繰り返し出力します。
データ領域とOverflowPlaceHolderを連結させることで、データ領域からあふれた部分をページ上の任意の場所に続けて出力できます。また、一番最後のOverflowPlaceHolderまでデータが出力されても、まだ出力すべきデータが存在する場合には、そのOverflowPlaceHolderが配置されているページのレイアウトで繰り返し出力します。
ここからは、OverflowPlaceHolderを使用する一例として、前の手順で作成した「商品一覧」のページレポートを元に、一覧部分を2段組にした上で、1ページ目とそれ以降のページでレイアウトが異なるようなレポートを作成してみます。
ページ1レイアウト
まず、タイトルとして配置した「仕入先」と「在庫数量」のTextBoxを削除します。
次に、List上に配置しているCompanyNameとUnitsInStockの値を出力するためのTextBoxを削除します。削除したらListの幅を縮めます(ここでは幅を7cmとします)。このときはFixedSizeプロパティの幅(Widthプロパティ)もコントロールの幅(Size.Widthプロパティ)と同じ値に設定します。
次は、同じサイズのOverflowPlaceHolderをListの右隣に配置します。名称はデフォルトのOverflowPlaceHolder1としておきます。OverflowPlaceHolder1の上方に「商品コード」と「商品名称」のタイトルをコピーして貼り付けます。
上記のような手順を行うことで、ページ1のレイアウトが完成します。
ページ2レイアウト
次は、2ページ目以降のレイアウトを定義する手順を説明します。
デザイナ下部の「ページ1」タブの隣にある「新規」タブをクリックします。すると「ページ2」が作成されます。これが2ページ目以降のレイアウトになります。
「ページ2」上にOverflowPlaceHolderと「商品コード」「商品名称」のTextBoxをそれぞれ2つずつ貼り付けます。配置した2つのOverflowPlaceHolderの名前はそれぞれ、OverflowPlaceHolder2、OverflowPlaceHolder3とします。
このようにすることで、ページ2のレイアウトが完成します。
レイアウトができたら、最後に各データ領域コントロール同士を連結させます。
ListのOverflowNameプロパティに、「OverflowPlaceHolder1」を設定します。このように設定することで、Listに収まりきらなかったデータはOverflowPlaceHolder1の部分に継続して出力されることになります。
同様に、OverflowPlaceHolder1のOverflowNameプロパティには「OverflowPlaceHolder2」を、OverflowPlaceHolder2のOverflowNameプロパティには「OverflowPlaceHolder3」を設定します。OverflowPlaceHolder3のOverflowNameプロパティは空白のままで構いません。
この状態でレポートを表示させると、1ページ目は「商品一覧」の見出しがあり、2ページ目以降は見出しがない2段組レポートができます。
まとめ:セクションレポートとページレポート
ページレポートを使うと、セクションレポートでは実現しにくいレイアウトも実現できる場合があります。特にOverflowPlaceHolderコントロールを使用すると、セクションレポートでは実現しにくい自由なレイアウトを実現できます。
ただその一方で、セクションレポートの方が得意な処理もあります。例えば、セクションレポートの場合、さまざまな「イベント」が用意されており、コードによる処理を記述するのも容易であり、柔軟性に優れた面があります(ページレポートには「イベント」という概念が存在しません)。
レポートを作成する最初の段階で、どちらのレポート形式が適しているかを検討してみてください。