如何获取内存中对象的数据集?

时间:2012-03-02 13:02:33

标签: delphi generics rtti tdataset data-aware

有没有人知道一个与Generics和RTTI一起使用的TDataset后代,这样我就可以编写这样的代码,并在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; 

应该是可能的。 fielddef可以通过RTTI创建,因为已知数据的确切类型。值也可以来回自动编组,因此您可以查看和编辑类或记录中的数据。

我讨厌编写大量无用的编组代码,而已经提供的信息可以通过RTTI获得。

或者有人曾经写过某种TEnumerable&lt; - &gt; TDataset适配器?

是否存在类似的东西,或者我应该开始写一个?

...

<子> 我能找到的最接近的东西是来自Mastering Delphi 7的Marco Cantu(优秀!)example,但代码本身并没有使用泛型,新RTTI系统或属性等新语言功能,它不适用于Unicode delphi。自D7以来,TDataset也发生了变化

5 个答案:

答案 0 :(得分:4)

TMS Aurelius中包含的TAureliusDataSet非常接近。

答案 1 :(得分:2)

www.inovativa.com.br/public处查看来自 Inovativa EverClassy数据集

答案 2 :(得分:1)

来自荷兰的DotNet4Delphi的{p> A-Dato Scheduling Technology对你有好处。

enter image description here

行情:

来自Torry的Delphi

  

将任何收藏连接到数据感知控件

     

DotNet4Delphi实现了许多.Net集合类,包括   泛型类型,例如List&lt;&gt;和词典&lt;&gt;。与他们不同   Delphi对应的是我们的通用集合也实现了   允许您访问的非通用接口(IList,IDictionary)   您的收藏品有多种方式。这打开了使用任何一扇门的大门   收集作为数据感知控件的数据源正是如此   (还包括)TListDataset组件提供的内容。

它针对Delphi XE和XE2。

这是一个开源计划,Delphi摇滚!!!

答案 3 :(得分:1)

另一个是Snap Object Dataset http://digilander.libero.it/snapobject/

答案 4 :(得分:1)

我找到了更相关的资源,无法帮助分享!如此相关,我认为它应该是一个单独的帖子,而不仅仅是我的第一个答案中的更新。


Delphi XE2-XE6的 Dduce 库使用TListDataSet<...>通用数据集组件,可用于公开通用列表作为TDataSet。

与通用数据集实施相关的最相关单位是:

类层次结构:

  

TDataSet&lt; = TCustomVirtualDataset&lt; = TListDataset&lt; = TListDataset&lt; T&gt;

是的,它继承了很多功能......我唯一的愿望就是拥有一个可以满足较低要求的版本(德尔福XE没有其他大部分的花里胡哨)。

外观:

enter image description here