Reports for WinForms の 2009 v3 リリースでは、計算されたスタイルプロパティへのサポートが追加されました。各スタイルプロパティに、「Expr」が付加された同じ名前で文字列が一致するプロパティが追加されました。たとえば、BackColorExpr とTextColorExpr プロパティが BackColor と TextColor プロパティに一致するというように、すべてのプロパティで続きます。
複合プロパティのサブプロパティ(ImageAlign、Borders など)も、式が一致するサブプロパティを持ちます。たとえば、 LeftExpr プロパティは Left プロパティに一致するというように続きます。
スタイル式
次のオブジェクトはスタイル式内で使用できます。
- RenderObject:現在のスタイルのオーナー描画オブジェクト。
- Document:現在のドキュメント。
- Page(および PageNo などの他のページ関連オブジェクト):オブジェクトを格納するページ(下の注記を参照)。
- RenderFragment:現在のフラグメント。
- Aggregates。
- Fields, DataBinding:現在のデータソースを参照します。スタイルのオーナーがテーブル内にあり、データソースが行と列の両方に指定された場合は、列に定義されたデータソースを参照します。
- RowNumber:関連付けられたデータソースの行番号。
- ColFields, ColDataBinding:スタイルがテーブル内で使用された場合にのみアクセス可能で、列に定義されたデータソースを参照します。
- RowFields, RowDataBinding:スタイルがテーブル内で使用された場合にのみアクセス可能で、行に定義されたデータソースを参照します。
変換型
- 計算されたスタイルプロパティ値がオブジェクトのレンダリングに使用される実際の値に割り当てられると、タイプは次の規則に従って変換されます。
- ターゲットプロパティが数値型(int、float など)の場合、必要に応じて、計算された値は必要な数値型に変換(string、rounded などから変換)されます。
- ターゲットプロパティが単位(スペースなど)で、式が数値を生成する場合、単位は new Unit(Document.DefaultUnitType, value) コンストラクタを使用して作成されます。式が文字列を生成した場合、この文字列は通常の単位規則を使用して解析されます。
- それ以外の場合はすべて、TypeConverter を使用してこの値をターゲットタイプに変換する試みが行われます。
- 最後に、式が null を生成した場合、プロパティが現在のスタイルに指定されなかったかのように、親のスタイル値が使用されます(未指定のスタイルプロパティのデフォルト動作など)。
ページ参照
以下は、ページ参照に関連する重要な注記です。スタイル式は現在のページを参照できます。たとえば、次のようになります。
ro.Style.BackColor = "iif(PageCount < 3, Color.Red, Color.Blue)";
この式はドキュメントの生成時に計算できません。そのため、生成時にこの式は無視(デフォルト値を使用)され、値は、オブジェクトを格納する実際のページがレンダリングされる(プレビューへの描画、エクスポートなど)ときに計算されます。
その結果、改ページ制御に依存しかつドキュメントのレイアウトに影響するスタイル式は、予期しない望ましくない結果を生成する可能性があります。たとえば、次の式がフォントサイズに使用された場合
ro.Style.FontSize = "iif(PageCount < 3, 20, 30)";
上の式は生成時に無視されます。その結果、レンダリングされたテキストは計算されたオブジェクトのサイズには大きすぎる可能性が非常に高く、クリッピングが発生します。