Как я могу получить набор объектов в памяти?

Кто-нибудь знает о потомке TDataset, который работает с Generics и RTTI, чтобы я мог писать такой код и использовать компоненты с поддержкой данных в 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; 

Это должно быть возможно. Fielddefs могут быть созданы через RTTI, потому что точный тип данных известен. Значения также можно автоматически маршалировать назад и вперед, так что вы можете как просматривать, так и редактировать данные, которые находятся в классе или записи.

Я ненавижу писать много бесполезного кода для маршалинга, хотя необходимая информация для этого уже доступна через RTTI.

Или, может быть, кто-то когда-то написал какой-то TEnumerable <-> адаптер TDataset?

Существует ли что-то подобное или я должен начать писать?

...

Самым близким, что я смог найти, является (отличный!) Пример Марко Канту из Mastering Delphi 7, но сам код не использует новые языковые функции, такие как дженерики, новая система RTTI или атрибуты, и он не не работает с Unicode Delphi. TDataset изменился с D7 тоже.

5 ответов

Решение

TAureliusDataSet, включенный в TMS Aurelius, очень близок к этому.

Взгляните на набор данных EverClassy от Inovativa по адресу http://www.inovativa.com.br/public.

Другой набор данных Snap Object http://digilander.libero.it/snapobject/

DotNet4Delphi от A-Dato Scheduling Technology из Нидерландов - это хорошо для вас.

Цитаты:

Из Дельфи Торри

Подключите любую коллекцию к элементам управления данными.

DotNet4Delphi реализует множество классов коллекций.Net, включая универсальные типы, такие как List<> и Dictionary<>. В отличие от их Delphi-аналога, в наших универсальных коллекциях также реализованы неуниверсальные интерфейсы (IList, IDictionary), позволяющие получать доступ к вашим коллекциям несколькими способами. Это открывает возможности для использования любой коллекции в качестве источника данных для элементов управления с учетом данных, что в точности обеспечивает (также включенный) компонент TListDataset.

Он нацелен на Delphi XE и XE2.

Это инициатива с открытым исходным кодом, Delphi качается!!!

Я нашел более подходящий ресурс и не могу не поделиться им! Настолько уместно, что я думаю, что это заслуживает отдельного поста, а не простого обновления в моем первом ответе.


Библиотека Dduce для Delphi XE2-XE6 использует TListDataSet<...> универсальный компонент набора данных, который можно использовать для представления общего списка как TDataSet.

Наиболее релевантными единицами, относящимися к реализации общего набора данных, являются:

Иерархия классов:

TDataSet <= TCustomVirtualDataset <= TListDataset <= TListDataset

Да, он наследует множество функций... Мое единственное желание - иметь в своем распоряжении версию, работающую с меньшими требованиями (Delphi XE без большинства других наворотов).

Смотри и чувствуй:

Другие вопросы по тегам