[fpc-pascal] fpreport: can not use two ObjectLists as datasource in one report
Michael Van Canneyt
michael at freepascal.org
Thu Mar 18 13:05:46 CET 2021
On Thu, 18 Mar 2021, Andreas Frieß via fpc-pascal wrote:
> I have a sample attached to show the problem.
>
> I want in the report (created a runtime) to use more than one report
> datasource. I create a databand and connect this with a
> TFPReportObjectListData object. Each TFPReportObjectListData object
> works. But i want to have the data of the first, then the data of the
> other object. But i am not able to combine this two Data in one Report.
>
> *--------------------*
> DataBand := TFPReportDataBand.Create(p);
> DataBand.Name:= 'DBBand01';
> DataBand.Layout.Height := 10;
> DataBand.Data:= lReportOLData1; // First Data !!!!! This is shown
>
> Memo := TFPReportMemo.Create(DataBand);
> Memo.Layout.Left := 5;
> Memo.Layout.Top := 0;
> Memo.Layout.Width := 60;
> Memo.Layout.Height := 5;
> Memo.Font.Name := defaultFont;
> Memo.Text := '[InfoA] - [ValueA]';
>
>
> DataBand2 := TFPReportDataBand.Create(p);
> DataBand2.Name:= 'DBBand02';
> DataBand2.Layout.Height := 10;
> DataBand2.Data:= lReportOLData2; // Second Data !!!!! This is not shown
>
> Memo2 := TFPReportMemo.Create(DataBand2);
> Memo2.Layout.Left := 5;
> Memo2.Layout.Top := 0;
> Memo2.Layout.Width := 60;
> Memo2.Layout.Height := 5;
> Memo2.Font.Name := defaultFont;
> Memo2.Text := '[InfoB] - [ValueB]';
>
> *--------------------------*
> Any Hint for this problem to solve ?
This is not supported as you write it.
You can have multiple datasources, but only 1 data band.
If you need multiple data bands, you'll need to use master-detail.
If you want to use the second dataset in a memo expression, you must add it
to the reportdatasets:
lReportOLData2.name:='Data2';
YourReport.ReportData.Add(lReportOLData2);
and in memo2 (which you must place somewhere else):
Memo2.Text := '[Data2.InfoB] - [Data2.ValueB]';
I can't advise you on what bands you must place memo and how to advance the 2nd
data list, because for that I would need to know the expected layout.
By the way, in
if Assigned(rptExporter) then FreeAndNil(rptExporter);
etc.
The If Assigned() is not needed. FreeAndNil (or more accurately, Free) will already check this for you.
Michael.
More information about the fpc-pascal
mailing list