1

以下に示すように、FastReport でテーブル (列:- ID) のデータを Grid 形式で表示したいと考えています。テーブルに 22 個のレコードがあるとすると、FastReport の 3 * 3 グリッドに次のように表示されます。

ここに画像の説明を入力

MasterData1 バンド内のメイン ページでサブレポートを使用しています。サブレポートのマスターデータ バンドは次のとおりです。

MasterData1 バンド

TfrxReportPage1 - 列 2

ここに画像の説明を入力

サブレポート - MasterData2 プロパティ Columns 3 、 RowCount 9

ここに画像の説明を入力

しかし、高速レポートをプレビューすると、次のようにページ上の各グリッドで同じデータが繰り返されます

ここに画像の説明を入力

frxDBDataSet1 を使用してデータを表示しています (レコード数 9)。合計 28 のレコードがあるため、ページには 27 の ID を持つ 4 つの 3*3 グリッドが表示されると予想されます。上記のように、各 3*3 グリッドで最初の 9 つの ID を繰り返します。

frxDBDataSet1 で Number Of Records 0 を設定した場合、以下のように表示されます。3 * 3 グリッドを形成していませんが、連続したデータを示しています。 ここに画像の説明を入力

4

2 に答える 2

1

以前の*回答は新しいバージョンでは機能しないため編集

サブレポートのマスターデータ バンドの行数を 9 に設定します。
メインレポートで、サブレポートを含むマスターデータ バンドをコピーして 2 回挿入します。
プロパティ StartNewPage を true に設定して、マスターバンドの間にヘッダーバンドを配置します。
OnBeforePrint イベントを 2 番目と 3 番目のサブレポートに追加して、データセットのフィルターを変更します。

procedure Subreport2OnBeforePrint(Sender: TfrxComponent);
begin
  TfrxDBDataSet(Report.GetDataset('frxDBDataset1')).Dataset.Filter := 'ID>9';  
  TfrxDBDataSet(Report.GetDataset('frxDBDataset1')).Dataset.Filtered := true;                                          
end;

procedure Subreport3OnBeforePrint(Sender: TfrxComponent);
begin
  TfrxDBDataSet(Report.GetDataset('frxDBDataset1')).Dataset.Filter := 'ID>18';  
  TfrxDBDataSet(Report.GetDataset('frxDBDataset1')).Dataset.Filtered := true;  
end;

ここに画像の説明を入力

(*) 古いレポート バージョンの場合、バージョン 4.10.01 と 4.12.14 の間で機能しなくなった別のアプローチを使用できます。

サブレポートのメモにOnAfterPrintイベントを追加します。9 "行" を印刷した後、プロパティStartNewPageを true に設定します。Masterband の Rowcount は 1 に設定する必要があります。

procedure YourMemoFromTheSubReportToRepeat9TimesPerPageOnAfterPrint(Sender: TfrxComponent);
begin
    MasterDataBandFromSubReport.StartNewPage := <Line#>  mod 9 = 0  
end;

ここに画像の説明を入力

于 2013-10-30T07:22:08.597 に答える