Выставление объектов в FastReport - PullRequest
2 голосов
/ 19 января 2011

Я использую FastReport (ознакомительная версия) в основном для печати счетов и цитат.Я пытаюсь поддерживать разделение между моими источниками данных и логикой приложения, поэтому мне интересно, есть ли простой способ выставить объекты Delphi непосредственно в FastReport.В настоящее время я прибегаю к пользовательским источникам данных, но это много ручного перебора.

По сути, я хочу взять уже инстанцированный объект TInvoice и распечатать его с помощью FastReport.

Есть кто-нибудьреализован общий класс предков или интерфейс для представления объектов Delphi в качестве источников данных для FastReport (или другого инструмента отчетности)?

Редактировать: Я использую Delphi XE.

Ответы [ 2 ]

9 голосов
/ 19 января 2011

Используя 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; 
0 голосов
/ 20 января 2011

Если вы ищете платного, у меня есть кое-что для вас. Поддержка простых типов, класс потока памяти в качестве мемо-поля и подобъекта. Работа от 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;
  .....

Свяжитесь со мной как apz28 на hotmail dot com

...