Search code examples
delphigenericsrttitdatasetdata-aware

How can I get a dataset of in-memory objects?


Does anyone know of a TDataset descendant that works with Generics and RTTI, so that I can write code like this, and make use of data-aware components in the GUI? :

...
ds:TDataset<TPerson>;
...

procedure DoStuff;
begin    
  ds:=TDataset<TPerson>.create;
  ds.add(TPerson.Create('A.','Hitler',77));
  ds.add(TPerson.Create('O.','Bin Laden',88));
 end; 

This should be possible. The fielddefs can be created via RTTI because the exact type of the data is known. Values can also be automatically marshalled back and forth, so you can both view and edit data that's in a class or a record.

I hate having to write a lot of useless marshalling code, while the required information for that is available via RTTI already.

Or maybe somebody once wrote some sort of TEnumerable <-> TDataset adapter?

Does something like that exist, or should I start writing one?

...

The closest thing that I could find is an (excellent!) example by Marco Cantu, from Mastering Delphi 7, but the code itself doesn't make use of new language features like generics, the new RTTI system, or attributes, and it doesn't work with Unicode delphi. TDataset has changed since D7 too.


Solution

  • The TAureliusDataSet included in TMS Aurelius comes very close to that.