ActiveReports for .NET 18.0J
アンバウンドフィールド
ActiveReportsユーザーガイド > 概念 > セクションレポートの概念 > データ連結 > アンバウンドフィールド

データの流れで解説した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);
}