データの流れで解説したFieldオブジェクトを経由したデータ連結の仕組みは、バウンドフィールドについては冗長なものに思えます。しかし、これはバウンドフィールドには存在しないデータを扱う場合に非常に便利です。ActiveReportsでは、プログラマがバウンドフィールドに存在しないFieldオブジェクトを追加することができます。
たとえば、データソース(DataTable)の中に「単価」と「数量」のデータしかない(「商品名」は説明の都合上省きます。)ものとし、レポート上には「金額」を表示する必要があるとします。この場合、Fieldsプロパティの中にも「単価」と「数量」のFieldオブジェクトしかありません。したがって、このままではレポート上のTextBoxコントロールに「金額」のデータを出力できません。しかし、ここでFieldsプロパティに「金額」という名前のFieldオブジェクトを追加すれば、この「金額」データを出力することができます。
ただし、単に「金額」というFieldオブジェクトを追加しただけでは、値の設定は行われません。これは、「単価」や「数量」などのバウンドフィールドには、データソース内のデータが自動設定されますが、プログラマが作成した「金額」には値が設定されないからです。値を表示するためには、FetchDataイベントの中で「単価」×「数量」を計算した結果を「金額」のFieldオブジェクトに設定する必要があります。このようにプログラマ自身が作成、管理するFieldオブジェクトをアンバウンドフィールドと呼びます。
レポートのDataInitializeイベント内にコードで記述します。アンバウンドフィールドは、バウンドフィールド同様に、各レポートコントロールのDataFieldプロパティにセットし、値をレポート上に出力することができます。
Visual Basic
Visual Basicコード |
コードのコピー
|
---|---|
Private Sub NewActiveReport1_DataInitialize(...) Handles Me.DataInitialize ' アンバウンドフィールドを追加します。 Fields.Add("金額") ' 作成したアンバウンドフィールドをTextBoxコントロールと連結します。 txtKingaku.DataField = "金額" End Sub |
C#
C#コード |
コードのコピー
|
---|---|
private void NewActiveReport1_DataInitialize(object sender, EventArgs e) { // アンバウンドフィールドを追加します。 Fields.Add("金額"); // 作成したアンバウンドフィールドをTextBoxコントロールと連結します。 txtKingaku.DataField = "金額"; } |
アンバウンドフィールドには、FetchDataイベントを使用してデータを供給します。
Visual Basic
Visual Basicコード |
コードのコピー
|
---|---|
Private Sub NewActiveReport1_FetchData(...) Handles Me.FetchData Fields("金額").Value = _ CType(Fields("単価").Value, Integer) * CType(Fields("数量").Value, Integer) End Sub |
C#
C#コード |
コードのコピー
|
---|---|
private void NewActiveReport1_FetchData(object sender, FetchEventArgs eArgs) { Fields["金額"].Value = Convert.ToInt32(Fields["単価"].Value) * Convert.ToInt32(Fields["数量"].Value); } |