本稿は、連載『5分でわかるActiveReports帳票(2007年度版)』(渡辺俊史・宮本奈紗 著)の増補改訂版です。
セクションレポート:動的な処理をするレポート
本記事の第1回と第3回ではセクションレポートの使い方を紹介しましたが、そこで紹介したレポートはデータベースから取得したデータをそのまま表示するものでした。今回はそのデータを加工し、動的に表示内容を変更する方法を紹介します。
データを加工する方法としては、以下のようなものがあります。
1)TextBoxコントロールのOutputFormatプロパティに書式を設定する
TextBoxコントロールには出力する値の書式を設定するためにOutputFormatプロパティが用意されております。こちらについては第3回の「コラム:書式について」をご覧ください。
2)対象コントロールのDataFieldプロパティに式を記述する
DataFieldプロパティに記述する式を「フィールド式」と言います。
3)ActiveReportsが提供するイベントに、データを制御するコードを記載する
4)計算フィールドを作成し、それをDataFieldプロパティに設定する
「計算フィールド」は、2の「フィールド式」を使った処理を、レポートデータソースに含めるものです。今回は詳しい説明を省略いたしますが、興味がある方は製品ヘルプの[概念]-[セクションレポートの概念]-[データ連結]-[計算フィールド]をご覧ください。
今回は、フィールド式とコードの使い方について解説します。
フィールド式
TextBoxなどのセクションレポートのコントロールには、DataFieldプロパティがあります。通常はここにデータソース内のフィールド名を設定します。
このときはフィールド名そのものではなく、フィールドを使用した式を記述することで、データを加工して表示することができます。
フィールド式の先頭には「=」をつけます。=の後には、フィールドを含めたC#言語構文の「式」を記述します。
例えば、金額を表すフィールドProductSalesがあるとします。これを千円単位で表示したい場合には以下のようにします。
=ProductSales/1000
文字列の加工に使用することもできます。OutputFormatプロパティを使った処理でも加工は可能ですが、フィールド式を使って単位「千円」をつけて表示したい場合、以下のようになります。このときの「+」はC#言語の文字列連結演算子です。
=ProductSales/1000 + "(単位千円)"
C#の式が使用できるので、三項演算子を使って簡単な条件判断を行うことも可能です。例えば、フィールド「ProductSales」の値が10000以上の場合は「一万円以上」、小さい場合は「一万円未満」と表示したい場合、以下のようになります。
=ProductSales => 10000 ? "一万円以上" : "一万円未満"
「フィールド式」と言っていますが、必ずしもフィールドを使用しなければならないわけではなく、.NET Framework標準のクラスも一部使うことができます。例えば、DateTime.Nowプロパティから現在の日付を取得し、AddDaysメソッドで1日追加した日付を表示したい場合、以下のようになります。
=System.DateTime.Now.AddDays(1).ToString("明日はd日")