【问题标题】:Exposing objects to Fastreport将对象暴露给 Fastreport
【发布时间】:2011-01-19 19:20:08
【问题描述】:

我使用 FastReport(评估版)主要用于打印发票和报价单。我试图保持我的数据源和应用程序逻辑之间的分离,所以我想知道是否有一种简单的方法可以将 Delphi 对象直接公开给 FastReport。目前,我正在使用自定义数据源,但这需要大量手动操作。

基本上,我想获取我已经实例化的 TInvoice 对象并使用 FastReport 打印它。

是否有人实现了一个共同的祖先类或接口来将 Delphi 对象作为数据源公开给 FastReport(或其他报告工具)?

编辑:我使用的是 Delphi XE。

【问题讨论】:

  • 什么版本的 Delphi,我有 2010 年使用新 RTTI 的东西。

标签: delphi delphi-xe fastreport


【解决方案1】:

使用 Delphi 2010 或更高版本,您可以使用此处的代码:

http://code.google.com/p/robstechcorner/source/browse/branches/rttiwork/ObjDS.pas

可以通过以下方式使用:

//typically created and declared someplace else
cds : TClientDataSet; 
Invoice : TInvoice;

var
  Mapper : TDataSetMapping;
begin
  Mapper := TDataSetMapping.Create(cds);
  Mapper.Value := Invoice;
  // CDS is now populated with the values stored in Invoice
end; 

【讨论】:

  • 噢……这太棒了!我很惊讶我以前没有注意到那个库。
  • 听起来很有趣——它知道如何处理收藏吗?
  • 如果对象实现了为 FOR IN 循环指定的 GetEnumerator,则它将列表的成员作为数据集中的单独行加载。
  • 那么---它知道如何处理集合吗? 。我回家后会检查一下。
  • 这取决于集合的实现。但它会知道如何处理大多数集合。
【解决方案2】:

如果您正在寻找付费的,我有东西给您。 支持简单类型、内存流类作为备忘录字段和子对象。从 delphi 7 和 xe 工作。低于自然的东西。也可以用来绑定编辑

{$M+}
TSubInfo = class
publish
  property AMem: TMemoryStream read ... write ....
  property ADat: TDateTime read ... write ....
end;

TInvoice = class
publish
  property AInt: Integer read ... write ...
  property AStr: string read ... write ...
  property ASubInfo: TSubInfo read ... write ...
end;
{$M-}

var
  DataSet: TObjectDataSet; // is decendent from TDataSet
  Invoice: TInvoice;
begin
  Invoice := TInvoice.Create...
  DataSet := TObjectDataSet.Create...;
  DataSet.BindObject := Invoice;
  DataSet.Active := True;
  .....

通过 hotmail dot com 以 apz28 身份与我联系

【讨论】:

  • 不,我不是。此外,让某人通过 hotmail 地址与您联系并不是开展业务的最佳方式。谢谢你的提议,我想。
猜你喜欢
  • 2016-11-27
  • 2010-12-01
  • 2021-01-17
  • 2018-06-19
  • 1970-01-01
  • 2013-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多