首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

TClientDataSet新增内部计算字段怎么设定默认值

2013-09-05 
TClientDataSet新增内部计算字段如何设定默认值?有一个TClientDataSet,名为cdLIST,在载入Data后,手动增加

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中自定义的常量类型,就完全可以被编辑。

热点排行