为什么我在DBGrideh新添加的列都不能编辑? .
1)这个列不是数据库的一个字段,只是用来表示当前行是否选中
2)这个checkbox可以编辑,可以选中和不选中之前切换
另一列是一列数据。。。
这两列都不是数据库的字段。。。
怎么样让他们可编辑???
[解决办法]
你这种情况应该是虚拟字段的问题,可以将数据转为XML之后,就可以编辑了!
function DataSetToXMLData(fData: TClientDataSet): String;
var
Str:string;
i:Integer;
rData:TClientDataSet;
begin
rData:=TClientDataSet.Create(nil);
try
Str:= fData.XMLData;
Str:=StringReplace(Str,'fieldtype="i4"','fieldtype="fixed" WIDTH="18"',[rfReplaceAll]);
Str:=StringReplace(Str,'SUBTYPE="Autoinc"',' ',[rfReplaceAll]);
Str:=StringReplace(Str,'readonly="true"',' ',[rfReplaceAll]);
Str:=StringReplace(Str,'DECIMALS="2" WIDTH="7"/>','DECIMALS="2" WIDTH="18"/>',[rfReplaceAll]);
rData.XMLData:=Str;
with rData do //把所有数据的空格去掉
begin
First;
while not eof do
begin
for i:=0 to FieldCount-1 do
begin
Edit;
Fields[i].AsString:= Trim(Fields[i].AsString);
Post;
end;
Next;
end;
end;
rData.MergeChangeLog;
Result := rData.XMLData;
finally
rData.Free;
end;
end;