读书人

怎么动态生成clientdataset的internal

发布时间: 2012-03-23 12:06:21 作者: rapoo

如何动态生成clientdataset的internalcalc字段
大家好,

我在form上放了一个adoconnection,adoquery,datasetprovider,clientdataset,datasouce 及一个dbgrid控件

及一个button

procedure TForm1.Button1Click(Sender: TObject);
var
ofield1: tfield;
begin
ClientDataSet1.close;
ofield1 := tfield.Create(ClientDataSet1);
ofield1.Name := 'clientdataset1choose';
ofield1.FieldName := 'choose';
ofield1.Index := ClientDataSet1.FieldCount;
ofield1.Visible := true;
ofield1.SetFieldType(ftboolean);
ofield1.FieldKind := fkinternalcalc;

DataSource1.DataSet := ClientDataSet1;
DBGrid1.DataSource := DataSource1;

ClientDataSet1.Active := true;

DBGrid1.Refresh;

end;

我的目的是想在DBGRID1上比后台表字段数多一个,即这个新增的ofield1,但是运行这个button1后并未显示出来,而且再次点button1,提示已有choose这个字段,看样子刚才确实是建立了internalcalc类型的choose字段,但为什么未显示出来呢,另外,如何再动态释放这个刚建立的字段呢?

谢谢


[解决办法]
ClientDataSet可以增加字段的
[解决办法]
有几个错误
procedure TForm1.Button1Click(Sender: TObject);
var
ofield1: tfield;
var
ofield1: TBooleanField; ------------------应该是继承类
begin
ClientDataSet1.close;
ofield1 := TBooleanField.Create(ClientDataSet1);

ofield1.Name := 'clientdataset1choose ';
ofield1.FieldName := 'choose ';
ofield1.Index := ClientDataSet1.FieldCount;
ofield1.Visible := true;
ofield1.SetFieldType(ftboolean);
ofield1.FieldKind := fkinternalcalc;

// 以下两句没有用。
DataSource1.DataSet := ClientDataSet1;
DBGrid1.DataSource := DataSource1;

ClientDataSet1.Active := true;

// DBGrid1.Refresh;
// 应该改称
DBGrid1.DataSource := nil;
DBGrid1.DataSource := DataSource1;


我修改后的,可以直接运行

var
ofield1: TBooleanField;
begin
ClientDataSet1.close;
ofield1 := TBooleanField.Create(ClientDataSet1);
ofield1.FieldName := 'choose ';
ofield1.FieldKind := fkinternalcalc;
ofield1.DataSet := ClientDataSet1;
ClientDataSet1.Active := true;
DBGrid1.DataSource := nil;
DBGrid1.DataSource := DataSource1;
end;

读书人网 >.NET

热点推荐