Как я могу получить набор объектов в памяти?
Кто-нибудь знает о потомке 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.
Наиболее релевантными единицами, относящимися к реализации общего набора данных, являются:
- DDuce.Components.VirtualDataSet.pas (Оригинальный пост SO цитируется самим автором в исходном коде как ссылка среди других!!!)
- DDuce.Components.ListDataSet.pas
Иерархия классов:
TDataSet <= TCustomVirtualDataset <= TListDataset <= TListDataset
Да, он наследует множество функций... Мое единственное желание - иметь в своем распоряжении версию, работающую с меньшими требованиями (Delphi XE без большинства других наворотов).