我使用 FastReport Designer 创建了一个报表,并使用 Delphi 6 调用它。但是 MasterData
的 DataSet
和字段在设计时未分配。我想根据所选的DataSet
在运行时设置这些属性。我怎样才能做到这一点?在调用预览/打印/设计之前,如何访问Delphi中MasterData
的DataSet
?在 frxReport1BeforePrint
中添加了以下代码。
t := frxReport1.FindObject('MasterData1') as TfrxMasterData;
//if Assigned(t) then
//t.DataSet := frxIBODataset1;
m := frxReport1.FindObject('mTenderType') as TfrxMemoView;
if Assigned(m) then
begin
m.DataSet := frxIBODataset1;
m.DataField := 'ACCOUNTNAME';
m.Text := '[frxIBODataset1."ACCOUNTNAME"]';
end;
但我需要在调用打印/设计/预览之前设置这些属性。如有任何帮助,我们将不胜感激。
最佳答案
您应该首先指定您是尝试使用应用程序中定义的数据集,还是直接在报表中定义的数据集(FastReport 设计器中的“数据”选项卡)?
如果您尝试使用应用程序内部定义的数据集(例如,在数据模块之一中定义的 AdoDataset 实例),出于此目的,您不必将 MasterBand 绑定(bind)到数据集。动态地。在报告中,您的 MasterBand 在设计时绑定(bind)到 TfrxDbDataset 实例。在运行时,您的 frxDbDataset 实例可以连接到项目中的任何数据集。
情况如下:
1- 将 frxReport 组件和 frxDbDataset 组件拖放到表单或数据模块上。 2- 在报告设计器中,转到数据集部分,并将可用的 frxDbDataset 添加到报告的数据集列表中。 3- 添加主数据带,并将 frxDbDataset 分配给其数据集属性。 4-现在在您的代码中,在显示或准备报告之前,您可以编写如下内容:
if MyOption = 1 then
frxDbDataset1.Dataset := AdoDataset1
else
frxDbDataset1.Dataset := AdoDataset2;
您分配给 frxDbDataset 的任何内容都将由主带打印在您的报告中。
如果您使用 FastReport 设计器直接在报表内定义数据集;那么一切都在你的报告中。只需打开 fastreport 设计器并执行以下操作:
1- 转到“数据”选项卡并定义您的数据集(例如 AdoQuery1)。 2- 从报告树 Pane 中选择报告对象。 3- 在对象检查器中,转到“事件”选项卡。 4- 选择合适的事件; OnStartReport 对于您的工作来说是一个很好的事件。双击它打开代码编辑器。 5- 现在您可以使用 PascalScript 代码将数据选项卡中定义的数据集分配到主数据带。像这样的事情:
procedure frxReport1OnStartReport(Sender: TfrxComponent);
begin
MasterData1.Dataset := <ADOQuery1."ADOQuery1">;
end;
关于delphi - 如何在FastReport中动态分配数据集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4065317/