我有一个定制的TDatasetProvider,允许为它提供的任何数据创建新的字段。
因此,假设您在原始数据集中获得了折叠字段:
您需要使用显示位图的方式在DBGrid上选择它。您可以这样做,因为我的DSP可以向数据集数据中添加一个名为Selected的布尔字段。
我现在的做法是:
developer
H 120,最后将数据变体作为来自InternalGetRecords.的返回值返回。
我真的不知道是否有一种更优雅(更快)的方法来做到这一点。还有另外一种(更快和更优雅)的方法来获得这个结果吗?
发布于 2012-05-01 14:59:55
似乎在从源数据集中加载数据之后,可以调用IDSBase.AddField添加更多字段:
uses
DB, DBCommon, DBClient, DSIntf;
type
THackClientDataSet = class(TClientDataSet);
procedure EncodeFieldDesc(var FieldDesc: DSFLDDesc;
const Name: string; DataType: TFieldType; Size, Precision: Integer;
Calculated: Boolean; Attributes: TFieldAttributes);
begin
// ... copied from TClientDataSet.EncodeFieldDesc
end;
//...
var
FldDesc: DSFLDDesc;
begin
FillChar(FldDesc, SizeOf(FldDesc), 0);
EncodeFieldDesc(FldDesc, 'SELECTED', ftBoolean, 0, 0, False, []);
with THackClientDataSet(DataSet) do
Check(DSBase.AddField(@FldDesc));
// now you can create a second client dataset and assign it DataSet.Data directly:
// DataSet2.Data := DataSet.Data;
// DataSet2 now contains the new field (with empty values in all existing records)
end;我没有对其进行彻底的测试,但上面的简单示例如出一辙,我能够像往常一样导航第二个客户端数据集并编辑所有字段的值。
发布于 2012-04-19 22:25:51
最快的方法是使用CloneCursor。就像这样:
developer
Target.CloneCursor(Origin); //there are more params than this, but this is the basic idea
发布于 2012-04-27 20:14:33
我有一个示例,它动态地将字段添加到CDS中,使用匿名方法计算单个字段,以获得更大的灵活性。在打开CDS之前,要添加计算出的字段,而不是打开它。
这就是你要找的吗?问题不是很清楚..。
https://stackoverflow.com/questions/10234325
复制相似问题