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属性也会赋值。