delphi clientdataset 加一行 的问题;只读字段的修改可写的问题

procedure addNullLine(cds :tclientdataset;iNO :integer;str :string);
begin
  cds.Append;
  cds.Fields[0].Value := str;
  cds.Fields[1].Value := '全部';
  cds.Post;
  cds.IndexFieldNames := cds.Fields[iNO].FieldName;

end;

{解决clientdataset 在对应adoquery里写的内容并没有“全部”列,而又不想更改sql的情况,

但有个问题,如果加行前已有定位,加行后,需要重新定位。而且,如果字段为只读的话需要更改只读状态处理

}

procedure SetDstAllFieldCanEdit(cdsA: TClientDataSet;flag :integer);
var cdsB:TClientDataSet;
    I:Integer;
begin
  cdsB := TClientDataSet.Create(nil);
  Try
    cdsA.DisableControls;
    cdsB.Data := cdsA.Data;
    cdsA.Close;
    cdsA.FieldDefs.Clear;
    for I:=0 to cdsB.FieldDefs.Count - 1 do
      begin
        with   cdsA.FieldDefs.AddFieldDef   do
        begin
          DataType := cdsB.FieldDefs[I].DataType;
          Size := cdsB.FieldDefs[I].Size;
          Name := cdsB.FieldDefs[I].Name;
          if (flag = 1) and (Name = 'name') then
            Size := 100;
        end;
      end;
      cdsA.CreateDataSet;
      with cdsB do
      begin
       First;
       while   not   Eof   do
       begin
         cdsA.Append;
         for I := 0 to Fields.Count - 1 do
           cdsA.Fields[I].Value := Fields[I].Value;
         Next;
       end;
      end;
      if   cdsA.State   in   [dsInsert,dsEdit]   then   cdsA.Post;
      cdsA.MergeChangeLog;
  Finally
      cdsA.EnableControls;
      cdsB.Free;
  End;
end;

//将一个复制Data的clientdataset做成可写。以为直接赋值data会连着datasetprovider的一些东西一起赋值,readonly属性也会赋值。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值