如何在FastReport中动态分配数据集?

sin*_*inu 9 delphi dataset fastreport

我创建使用FastReport的设计,把它用Delphi 6.一份报告,但DataSet对于MasterData和字段是不是在设计时assinged.我想根据选中的时间在运行时设置这些属性DataSet.我怎样才能做到这一点?我怎样才能访问DataSetMasterData调用预览/打印/设计之前在Delphi?添加了以下代码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;
Run Code Online (Sandbox Code Playgroud)

但是我需要在调用print/design/preview之前设置这些属性.任何帮助表示赞赏.

vcl*_*per 2

您应该首先指定您是尝试使用应用程序中定义的数据集,还是直接在报表中定义的数据集(FastReport 设计器中的“数据”选项卡)?

如果您尝试使用应用程序内部定义的数据集(例如,在数据模块之一中定义的 AdoDataset 实例),出于此目的,您不必将 MasterBand 绑定到数据集。动态地。在报告中,您的 MasterBand 在设计时绑定到 TfrxDbDataset 实例。在运行时,您的 frxDbDataset 实例可以连接到项目中的任何数据集。

情况如下:

1- 将 frxReport 组件和 frxDbDataset 组件放在表单或数据模块上。2- 在报告设计器中,转到数据集部分,并将可用的 frxDbDataset 添加到报告的数据集列表中。3- 添加主数据带,并将 frxDbDataset 分配给其数据集属性。4-现在在您的代码中,在显示或准备报告之前,您可以编写如下内容:

  if MyOption = 1 then
    frxDbDataset1.Dataset := AdoDataset1
  else
    frxDbDataset1.Dataset := AdoDataset2;
Run Code Online (Sandbox Code Playgroud)

无论您分配给 frxDbDataset 的是什么,主带都会在您的报告中打印出来。

如果您使用 FastReport 设计器直接在报表内定义数据集;那么一切都在你的报告中。只需打开 fastreport 设计器并执行以下操作:

1- 转到“数据”选项卡并定义您的数据集(例如 AdoQuery1)。2- 从报告树窗格中选择报告对象。3- 在对象检查器中,转到“事件”选项卡。4- 选择合适的活动;OnStartReport 对于您的工作来说是一个很好的事件。双击它打开代码编辑器。5- 现在您可以使用 PascalScript 代码将数据选项卡中定义的数据集分配到主数据带。像这样的东西:

procedure frxReport1OnStartReport(Sender: TfrxComponent);
begin
  MasterData1.Dataset := <ADOQuery1."ADOQuery1">;      
end;
Run Code Online (Sandbox Code Playgroud)