手動による表の埋め込み
クロス集計オブジェクトには 2 つのバージョンがあります。「DB クロス集計」と「クロス集計」です。今までは、DB テーブルのデータに接続される、1 つ目のオブジェクトを使って作業してきました。このオブジェクトは、レポートが実行されるとすぐに自動的に自身を埋めます。2 番目のオブジェクトの「クロス集計」を見てみましょう。
クロス集計オブジェクトは、DB テーブルに接続されません。そのため、手動でデータを埋める必要があります。クロス集計オブジェクトには、DB クロス集計オブジェクトと類似したエディターが備わっていますが、表のタイトルやセルを DB フィールドによって設定する代わりに、それらの次元を指定する必要がある点が異なります。
例を使って、クロス集計オブジェクトの使い方を見てみましょう。レポートのデザイン ページにクロス集計オブジェクトを配置し、上の図で示されているようにプロパティを設定します。それぞれのレベルの数は、行のタイトルは 1、列のタイトルは 2、セルは 1 です。OnBeforePrint イベント ハンドラーを使用して、表にデータを入れましょう。
Pascal スクリプト:
procedure Cross1OnBeforePrint(Sender: TfrxComponent);
begin
with Cross1 do
begin
AddValue(['Ann'], [2001, 2], [1500]);
AddValue(['Ann'], [2001, 3], [1600]);
AddValue(['Ann'], [2002, 1], [1700]);
AddValue(['Ben'], [2002, 1], [2000]);
AddValue(['Den'], [2001, 1], [4000]);
AddValue(['Den'], [2001, 2], [4100]);
end;
end;
C++ スクリプト:
void Cross1OnBeforePrint(TfrxComponent Sender)
{
Cross1.AddValue(["Ann"], [2001, 2], [1500]);
Cross1.AddValue(["Ann"], [2001, 3], [1600]);
Cross1.AddValue(["Ann"], [2002, 1], [1700]);
Cross1.AddValue(["Ben"], [2002, 1], [2000]);
Cross1.AddValue(["Den"], [2001, 1], [4000]);
Cross1.AddValue(["Den"], [2001, 2], [4100]);
}
ハンドラーで、データは TfrxCrossView.AddValue
メソッドを介して表に追加されます。このメソッドには 3 つのパラメーターがあり、各パラメーターは Variant 型の配列となっています。最初のパラメーターは行の値、2 番目のパラメーターは列の値、そして 3 番目のパラメーターはセルの値です。
各配列内の値の数は、オブジェクトの設定と一致している必要があることに注意してください。
この例では、オブジェクトは 1 レベルの行タイトル、2 レベルの列タイトル、1 レベルのセルを持ちます。したがって、AddValue
メソッドの Variant 配列パラメーターには、行用の 1 つの値、列用の 2 つの値、セル用の 1 つの値が必要です。
プレビューすると、レポートの出力は次のようになります。
AddValue
メソッドは、DB クロス集計オブジェクトでも使用できます。これにより、オブジェクトに接続されているデータ ソースからは得られないデータの挿入が可能になります。任意のデータがこのように追加された場合は、データ ソースからのデータと一緒にそのデータも要約されます。