读书人

TClientDataSet新增内部计算字段怎么设

发布时间: 2013-09-05 16:02:07 作者: rapoo

TClientDataSet新增内部计算字段如何设定默认值?
有一个TClientDataSet,名为cdLIST,在载入Data后,手动增加一列类型为Boolean的“选择”字段:


var
fdTemp: TFieldDefs;
i: integer;
//前略
cdLIST.Data:=dpLIST.Data;
fdTemp:=cdLIST.FieldDefs;
cdLIST.Active:=False;
with TBooleanField.Create(cdLIST) do
begin
FieldName:='选择';
Name:='cdfSELECT';
FieldKind:=fkInternalCalc;
DataSet:=cdLIST;
end;
for i := 0 to fdTemp.Count - 1 do
with fdTemp.Items[i].FieldClass.Create(cdLIST) do
begin
FieldName:=fdTemp.Items[i].Name;
Size:=fdTemp.Items[i].Size;
Index:=fdTemp.Items[i].Index;
Name:='cdf' + IntToStr(i);
DataSet:=cdLIST;
end;
cdLIST.Active:=True;

字段添加成功,但是该字段默认的值都是null,我需要遍历整个DataSet,将“选择”字段的值设为False。当记录数量比较大(上万条)时,速度就变很慢,通过分析发现,这个遍历设置False的过程就消耗了整个过程一半的时间。
因此,我想如果我增加Boolean字段时能够将该字段默认值设置为False就好了,如果该字段默认所有值都是False,我就不需要遍历设置了。
请问这个是否可以实现?
谢谢!
[解决办法]
引用:
Quote: 引用:

最简单、最快的办法,就是从源头sql语句中定义一个常量类型的字段,其值为0,在cxGrid端取到该常量字段后,应用Properties属性CheckBox,并定义0为未选中、1为选中:

select ATable.*, 0 as Selected from ATable where...

但是这样出来的字段是无法编辑的,如何解决?


如果返回的结果集用TClientDataset来接收,在sql中自定义的常量类型,就完全可以被编辑。

读书人网 >.NET

热点推荐