2011-01-19 3 views
2

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

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

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

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

+2

Какую версию Delphi, у меня есть что-то на 2010 год, который использует новую RTTI. –

+0

Справа - я использую Delphi XE. –

ответ

9

Использование 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; 
+1

Ooo ... это очень приятно! Я удивлен, что раньше не замечал эту библиотеку. –

+0

Звучит интригующим - знает ли он, как обрабатывать коллекции? –

+0

Если объект реализует GetEnumerator, как указано для цикла FOR IN, он будет загружать элементы списка в виде отдельных строк в наборе данных. –

0

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

+0

Нет, я нет. Кроме того, просить кого-нибудь связаться с вами по адресу hotmail - это не лучший способ сделать бизнес. Спасибо за предложение, подумал. –

 Смежные вопросы

  • Нет связанных вопросов^_^