Fab*_*ujo 12 delphi tclientdataset tdatasetprovider
我有一个自定义的TDatasetProvider,允许为它提供的任何数据创建新的字段.
所以,假设您在原始数据集上获得了以下字段:
您需要使用显示位图在DBGrid上选择它.好吧,你可以,因为我的DSP可以添加一个调用Selected
数据集数据的布尔字段.
我现在这样做的方式:
我真的不知道是否有更优雅(和更快)的方式来做到这一点.有另一种(更快和/或更优雅)的方式来获得这个结果?
Ond*_*lle 13
似乎从源数据集加载数据后,您可以调用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;
Run Code Online (Sandbox Code Playgroud)
我没有彻底测试它,但上面的简单示例按预期工作,我能够导航第二个客户端数据集并像往常一样编辑所有字段的值.
归档时间: |
|
查看次数: |
10544 次 |
最近记录: |