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

标签 delphi dataset fastreport

我使用 FastReport Designer 创建了一个报表,并使用 Delphi 6 调用它。但是 MasterDataDataSet 和字段在设计时未分配。我想根据所选的DataSet在运行时设置这些属性。我怎样才能做到这一点?在调用预览/打印/设计之前,如何访问Delphi中MasterDataDataSet?在 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/

相关文章:

mysql - Delphi - MyDAC - 快速报告

delphi - 如何替换备忘录 (FastReport) 中的字符串?

delphi - 如何自动调整 TStringGrid 行的大小

c# - 非静态字段、方法或属性(数据集)需要对象引用

delphi - OpenGL 中的奇怪行为

.net - 锁定 DataSet 中的所有 DataTable 以执行安全更新

java - map 按值排序

Delphi、FastReport 参数

oracle - 将 Delphi/Oracle 应用程序从 2 层更改为 3 层

delphi - 如何使用Delphi处理内存有限的超大型列表