GrapeCity ActiveReports for .NET 14.0J
イベントの概要
ActiveReportsユーザーガイド > 概念 > セクションレポートの概念 > イベント > イベントの概要

セクションレポートでは、イベントを使用してレポートの動作を制御することができます。

1回だけ発生するイベント

以下のイベントは、レポートの処理時に1回だけ発生するイベントです。これらのイベントは、レポート生成処理の始まり、もしくは終わりに発生します。

1回だけ発生するイベント

ReportStart

DataInitializeイベントの前に発生します。このイベントは、レポートの実行時に必要な任意のオブジェクト、または変数を初期化するために使用します。また、サブレポートの場合、親レポートのこのイベントで内で、SubreportコントロールのReportプロパティに任意の子レポートを割り当てることができます。

注意: このイベントが完了した後で、レポートに項目を動的に追加してはいけません。

DataInitialize

ReportStartイベントの後に発生します。このイベントは、アンバウンドフィールドをレポートのFieldsコレクションに追加する場合に使用します。アンバウンドフィールドは、バウンドレポート(レコードを取得するために組み込みデータソースを利用するレポートのこと)や、アンバウンドレポート(レコードを取得するためにデータソースを必要としないレポートのこと)に追加できます。バウンドレポートでは、データセットがオープンされ、データセットのフィールドがフィールドコレクションに追加されます。次に、新しいアンバウンドフィールドを追加できるように、DataInitializeイベントが発生します。DataInitializeイベントを使用し、DataSourceを調整したりデータベースの接続を設定したりすることもできます。

ReportEnd

レポートの処理が終わった後に発生します。このイベントは、アンバウンドモードの実行中に使用していた任意のオブジェクトを閉じたり解放したりする場合や、情報やメッセージをエンドユーザーに表示したりする場合に使用します。また、このイベント内で、レポートをエクスポートすることもできます。

複数回発生するイベント

以下のイベントは、セクションレポート処理中に何回も発生します。

複数回発生するイベント

FetchData

新しいレコードを処理するたびに発生します。FetchDataイベントは、このイベントを続けて発生させるかどうかを示すEOFパラメータを持ちます。このパラメータは、レコードセットのEOFプロパティと同じではなく、デフォルトで「True」に設定されます。バウンドレポート(DataControlを使用するレポート)で作業している場合、EOFパラメータはレポートによって自動的に設定されます。しかし、アンバウンドレポートの場合は、このパラメータは手動で制御する必要があります。

このイベントは、アンバウンドレポートにおいて、DataInitializeイベントで定義したアンバウンドフィールドの値を設定する場合か、バウンドレポートにおいて、計算やフィールドの連結など、レコードから取得したデータに対し特別なデータ操作を行う場合に使用します。FetchDataイベント内で、レポート上のコントロールを直接操作してはいけません。

Detailセクション内のコントロールにデータセットの値を使用する必要がある場合は、FetchDataイベント内でアンバウンドフィールドなどの変数にデータセットの値を設定し、セクションのFormatイベント内で、この変数を使用してコントロールに値を設定します。FetchDataイベントで変数に値を設定し、これを使用してコントロールに値を設定するこの方法は、Detail_Formatイベント内でのみサポートされていることに注意してください。

また、配列、またはコレクションを操作する場合、カウンタのインクリメントはFetchDataイベントを使用してください。

PageStart

ページが描画される前に発生します。このイベントを使用し、アンバウンドレポートを実行するときに各ページに必要な変数を初期化します。

PageEnd

レポート内の各ページが描画された後に発生します。このイベントを使用し、アンバウンドレポートを実行するときに各ページに必要な変数を更新します。

バウンドとアンバウンドのデータ値を設定する上での重要なポイントについて

  1. FieldCollectionは、DataInitializeイベントが設定した後、レポートに連結されたデータセットから読み込まれます(アンバウンドレポートの場合、この時点でFieldCollectionの値は設定されていません)。
  2. FetchDataイベントが発生した後、ユーザーがFieldCollectionを更新することができます。
  3. バウンドされているすべてのフィールドの値が移動されます。
  4. Formatイベントが発生します。

各セクションに対して発生するイベント

セクションの種類や内容にかかわらず、レポートの各セクションにはFormatBeforePrintAfterPrintの3つのイベントがあります。 

セクションイベント

これらのイベントの発生順序は、集計オブジェクトとそのセクション従属関係に依存します。さまざまなレポートデザインが可能であるため、イベントが発生する順序は、個々のレポートの要求に合わせて動的に変化します。唯一の保証された発生順序は、セクションのFormatイベントがそのセクションのBeforePrintイベントの前に発生し、さらにBeforePrintイベントはそのセクションのAfterPrintイベントの前に発生することです。これらのイベントの発生順に頼るようなレポートの設計は行うべきではありません。

注意: これらのセクションイベント内で、FieldCollectionを参照することはできません。FieldCollectionは、DataInitializeイベント、もしくはFetchDataイベントで参照してください。

Format

データがロードされてフィールドにバインドされた後、セクションが印刷用にレイアウトされる前に発生します。

Formatイベントは、セクションの高さを変更できる唯一のイベントです。このイベントを使用し、セクション、またはセクション内の任意のコントロールのプロパティを変更します。

また、Formatイベントを使用し、SQL文字列などの情報をサブレポートに渡します。

セクション、またはセクション上のコントロールに対して、CanGrowプロパティ、またはCanShrinkプロパティを「True」に設定した場合の処理がFormatイベント内で発生します。このため、Formatイベント内にコントロールまたはセクションの高さに関する情報を取得することはできません。

Formatイベントが完了するまでセクションの高さが不明なため、セクションのFormatイベントはセクションが描画されていないページ上にレポートがあるときに発生させることができます。たとえば、Detail_Formatイベントが発生しますが、セクションが大きすぎてページに入らない場合があります。これによって、現在のページ上にPageFooterイベントとPageEndイベントが発生し、次ページのキャンバスにセクションを描画される前にPageStart、任意の他のHeaderイベント、およびFetchDataイベント(可能な場合)が発生します。

BeforePrint

セクションがページに描画される前に発生します。

セクションとコントロールの高さの変更(CanGrow、またはCanShrink)がすでに適用されています。したがって、このイベントを使用し、セクションとコントロールの正確な高さを取得することができます。BeforePrintイベントで、コントロールのサイズまたは値を変更できますが、セクション自体の高さは変更できません。

このイベントが発生したときレポートはセクションが描画されるページを認識しているため、このイベントを使用してページ固有の書式を設定します。セクションはこのイベントが発生した直後にキャンバスに描画されるため、このイベントが完了すると変更できません。

メモ: SubReportコントロールが1つ以上のページにわたっている場合、描画時により小さい部分に分割されます。この場合、BeforePrintイベントが、描画されたSubReportの各部分の高さを習得するために複数回発生します。

AfterPrint

セクションがキャンバスオブジェクトに描画された後に発生します。

このイベントを使用し、キャンバスに直接描画できます。このイベントが発生する時点では、セクションはすでにキャンバスに描画されていますので、既に描画されているセクションに対して変更を加えることはできません。このイベントは、ページにテキストが描画された後でページにさらに描画を追加する場合に便利です。

イベントの発生順

ActiveReportsの高速な処理、および出力生成は、知性的なマルチスレッド、かつシングルパスの処理によって実現されています。ActiveReportsは、準備ができたページからただちに処理、および描画を行います。データ要素の一部が認識できない、レイアウトが完成していないなどの理由でActiveReportsがページの描画を完了できない場合は、必要なデータが揃うまで、このページはActiveReportsの内部のキャッシュに格納されます。

イベントの発生順

ページが完全に描画されない場合は、集計用テキストボックスとKeepTogetherプロパティの値による制約が原因です。集計用テキストボックスは、集計に必要な全データがデータソースから読み込まれるまで描画が完了しません。総計などの集計用テキストボックスが、レポートヘッダ内など、その完了レベルより前に置かれている場合は、全データが読み込まれるまで、レポートヘッダセクション、およびそれ以降の全セクションの描画は遅延されます。

セクションレポートのコードでは10個のイベント、スクリプトでは7個のイベントが提供されています。

 

セクションレポートでは、多様な方法でレポートをカスタマイズすることができます。レポートを実行すると、一般的には次のような処理が行われます。

  1. ActiveReportsのレポートの実行は、ReportStartイベントの発生によって開始します。ReportStart内でレポート構造に加えられた変更を確認します。また、この時点で、データソースのプロパティにアクセスすると、DataInitializeイベントが発生します。
  2. 次にプリンタ設定が適用されます。設定が指定されていない場合、システムの既定のプリンタ設定が使用されます。
  3. DataInitializeイベントがReportStartイベントの最中に発生しなかった場合、DataInitializeイベントが発生します。データソースが開かれます。
  4. データソースに未設定の値を含むパラメータがあり、かつShowParameterUIプロパティが「True」に設定されている場合、ActiveReportsはパラメータダイアログを表示し、ダイアログが閉じるときにParameterUIClosedイベントを発生させます。
  5. レポートがサブレポートで、パラメータが必要な場合、ActiveReportsはサブレポートのパラメータを親レポートの任意のフィールドにバインドします。
  6. 次にFetchDataイベントが発生します。
  7. データがない場合は、NoDataイベントが発生します。
  8. PageStartイベントが発生し、その後は最後のページまで各PageEndイベント後に繰り返し発生します。
  9. グループセクションがバインドされ、セクションはページへの描画を開始します。
  10. ActiveReportでは、おおよそ次の順番でセクションが処理されます。
    • レポートヘッダ
    • ページヘッダ
    • グループヘッダ
    • 詳細
    • グループフッタ
    • ページフッタ
    • レポートフッタ
  11. 各イベントの後にキャンセルフラグがONになります。
  12. また、レポートのロジックに基づいて、他のイベントが発生する可能性があります。
  13. PageEndイベントは、各ページの処理が完了すると発生し、またPageStartイベントは新しいページへの出力を描画する前に発生します。
  14. ReportEndレポートがすべてのページの処理を完了した後に発生します。

レポートの生成処理に関するその他のイベント

以下のようなイベントは、レポートに対してデータがない時、またはユーザーの操作に応答する時に発生します。

その他のイベント

DataSourceChanged

レポートのデータソースが変更されるときに発生します。 エンドユーザーデザイナを使用する際に便利です。

NoData

レポートのデータソースが何もデータを返さず、処理するデータがない場合に発生します。

ParameterUIClosed

ユーザーがクエリーパラメータダイアログを閉じた後に発生します。

PrintAborted

ユーザーが印刷ジョブをキャンセルしたときに発生します。

PrintProgress

レポートドキュメントの各ページがプリンタへ送信されるごとに発生します。

関連トピック