SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

5分でわかるActiveReports帳票

5分でわかるActiveReports帳票(2013年度版)-動的なレポート

ActiveReports for .NET 7.0Jで作るサンプル帳票(5)

  • X ポスト
  • このエントリーをはてなブックマークに追加

イベントでのコードによる処理 1

 フィールド式だけでもいろいろな編集ができますが、複雑な条件判断を記述するのは現実的ではありません。

 セクションレポートにはさまざまなイベントが用意されており、そのイベントにコードを記述することで、レポートの内容を変更できます。

セクションレポートのイベント

 Windowsアプリケーションのプログラミングにはイベントを使用します。例えばフォーム全体の処理はForm.Loadイベントで処理するのが一般的です。セクションレポートのイベントもこれと似た感じのものです。

 イベントは、レポートの実行と、データの読み込み、セクションの描画に従って発生します。

セクションレポートのイベントの発生
セクションレポートのイベントの発生

 セクションレポートのイベントには、以下のものがあります。

レポート全体のイベント

ReportStartイベント

 レポートを実行した時に、最初に1回だけ発生するイベントです。用紙サイズやデータソースの設定など、レポート全体にかかわる設定はここで行います。

DataInitializeイベント/FetchDataイベント

 セクションレポートで使うデータの「フィールド」は、レポートのデータソースを元に自動的に生成されます。DataInitializeイベントは、自動的に生成されるフィールドの他に任意のフィールドを追加する際に使用します。ReportStartイベントの後に1回だけ発生します。

 FetchDataイベントは、データソースからデータ行を1行読み込むたびに呼び出されます。ここでフィールドに値を設定することもできます。

 DataInitializeイベントとFetchDataイベントを使って、データソースなしでセクションレポートを動作させることができます。この使用法は「アンバウンドレポート」と呼ばれます(詳細は後述します)。

ReportEndイベント

 レポート生成処理の最後に1回だけ発生します。レポート処理中に使用した任意のオブジェクトを閉じるなど、主に終了処理に使用します。なお、この段階ではレポートのページがすべて生成されています。従って、このイベントでは、PageクラスのDraw系メソッドを使って、任意のページに文字や線などを直接描画することも可能です。

PageStartイベント/PageEndイベント

 各ページの生成の最初と最後に発生するイベントです。

各セクションのイベント

 Detailセクション、ページヘッダ、ページフッタ、グループヘッダ、グループフッタなどの各セクションにもイベントが用意されています。これらのイベントは、セクションが1回描画されるごとに、基本的にそれぞれ1回ずつ発生します。

セクションのイベント
セクションのイベント
Formatイベント

 セクションの生成後に呼び出されるイベントです。セクションや、個々のコントロールの内容を変更する場合、通常はこのイベントを使います。

BeforePrintイベント

 セクションの生成後、描画の直前に呼び出されるイベントです。Formatイベントと同様に使用することができます。

 FormatイベントとBeforePrintイベントは同じように使われることもありますが、いくつか注意すべき違いがあります。

  • セクション自体の高さを変更できるのはFormatイベントだけで、BeforePrintイベントではできない。
  • CanGrow/CanShrinkプロパティによるセクション・コントロールの自動伸縮機能は、Formatイベントの後、BeforePrintイベントの前に実行される。このためBeforePrintイベントでコントロールに出力する内容を変更しても自動伸縮は実行されない。
  • SummaryFuncプロパティなどによる集計結果は、BeforePrintイベントの段階でないと取得できない。
AfterPrintイベント

 セクションの生成が終わった後に呼び出されるイベントです。

イベントを追加する方法

 イベントを追加する方法を説明します。

 デザイン画面で、イベントを使用したいセクション上でダブルクリックすると、.vbや.csのコードファイルに、Formatイベントのスタブが自動生成されます。

生成されるFormatイベントのスタブ

Visual Basic .NET
Private Sub Detail_Format(sender As System.Object, e As System.EventArgs) Handles Detail.Format

End Sub
C#
private void detail_Format(object sender, EventArgs e)
{

}

 生成されるイベントハンドラ名は、イベントのセンダ(この場合はセクション)の名前と、イベント名をアンダーラインでつないだものになります。Windowsアプリケーションでフォームやコントロールにイベントを追加する場合と同様です。

 セクションを選択していない状態でデザイン画面をダブルクリックすると、ReportStartイベントのスタブが生成されます。

  Format、ReportStart以外のイベントを生成したい時には、プロパティウィンドウのイベント画面からイベントを追加します。

プロパティウィンドウのイベント画面
プロパティウィンドウのイベント画面

 Visual Basic .NETでは、引数の後にあるHandles句によってイベントハンドラの登録が行われます。C#では.Designer.csファイルの中にイベントハンドラを登録するコードが追加されます。このためC#の場合は、サンプルコードをそのままコードに記述してもイベントとして働きません。注意してください。

次のページ
イベントでのコードによる処理 2

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
5分でわかるActiveReports帳票連載記事一覧

もっと読む

この記事の著者

グレープシティ株式会社 ActiveReportsチーム(グレープシティカブシキガイシャ アクティブレポートチーム)

 宮城県仙台市に本社を構えるグレープシティでは、日本の業務に適したシステムをより早く開発するためのソフトウェアを提供しています。エンドユーザーの利用しやすさ、幅広いユーザー環境への対応、そして何よりプログラマの作業を軽減することを一番に目指しています。 ActiveReportsは、帳票開発に必要なあらゆる機能を備えた当社を代表するコンポーネントの1つ。1998年の発売以来、日本だけでなく全世界で多数の帳票開発者に使用されています。製品開発は同チームが中心になり、「日本仕様」の厳しい要望を実現することを目指しています。...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/7516 2015/07/23 16:16

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング