起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 405|回复: 10

【搞定】代码创建的TBIZFIELD字段如何删除释放

[复制链接]
发表于 2007-7-3 15:11:10 | 显示全部楼层 |阅读模式
用代码创建的TBIZFIELD字段,用BizFields.Remove  ,或  BizFields.Free 均不能实现,再次创建时会提示字段已经存在,创建代码如下:     
var
    lBizField: TBizField;
    lColumn: TDataGridColumn;
    Fldid,flddisplayname:string;
begin

    with Query1 do
    begin
      Close;
      CommandText:='select f.code fcode,B.CODE BCODE,B.ABBR TABBR,F.abbr fabbr '
                 +' from ledwaybasic.FinancialItems F,  '
                 +'(select *  from ledwaybasic.basicdata  where Type=''PTT'' and spec=''DS'') b '//单双面
                 +' order by B.CODE'  ;
      OPEN;
      first;
      while not eof do
      begin
         Fldid:=sysutils.trim(FieldByName('BCode').AsString)+'|'+sysutils.trim(FieldByName('FCode').AsString);
         flddisplayname:=sysutils.trim(FieldByName('TABBR').AsString)+'|'+sysutils.trim(FieldByName('FABBR').AsString);
         lBizField := TUserDataField.Create(DataSetTEST);
         lBizField.DataSet := DataSetTEST;      //指定字段所在的数据集
         lBizField.ID :=Fldid; //'GS';                            //设置字段ID
         lBizField.DataType := TDataType.dtFloat;          //设置字段类型
         //lBizField.Size :=20;                            //设置字段大小
         lBizField.DisplayName :=flddisplayname;// 'AA|公司';
         lColumn := TDataGridColumn(DataGrid1.CreateColumnByClassName('TDataGridColumn')); // 字符串表示列的类型,可以是'TDataGridColumn', 'TDataGridImageColumn','TDataGridMaskColumn'
         lcolumn.Name:='TDataGridColumn'+Fldid;
         lColumn.FieldName :=Fldid ;//'KF'; // 邦定GUID字段
     lColumn.BandIndex:=1;
         lColumn.Width:=60;
         lColumn.Alignment:=TAlignment.taRightJustify;
         lColumn.HeaderAlignment:=TAlignment.taCenter;
         next;
   end;
   end;
     DataSource1.DataSet.Open;

end;
回复

使用道具 举报

发表于 2007-7-3 15:49:51 | 显示全部楼层
关注。也碰见过类似的问题,我是在UserDataSet上创建的字段,也是不能释放。据说只能通过释放数据集才能释放字段。唉,麻烦啊
回复 支持 反对

使用道具 举报

发表于 2007-7-3 16:50:21 | 显示全部楼层

DataSet.BizFieldByName('GS').Free;
DataSet.Refresh;
楼主试试看!
要注意DataGrid的column!
回复 支持 反对

使用道具 举报

发表于 2007-7-3 17:07:35 | 显示全部楼层
就是说要删除DataGrid的对应列
删除方式如下:
TDataGridColumn(DataGrid.ColumnByName('TDataGridColumn'+'GS')).Free;
DataGrid.Refresh;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-7-3 17:42:41 | 显示全部楼层
楼上方法还是不行,不过奇怪的是删除后,FieldList还存在代码创建的字段,用FieldList.Delete无法删除,提示是只读属性。
回复 支持 反对

使用道具 举报

发表于 2007-7-3 18:03:46 | 显示全部楼层
不会阿,我在自定义数据集上测试过,是可以的!
回复 支持 反对

使用道具 举报

发表于 2007-7-3 18:05:22 | 显示全部楼层
//动态增加字段
procedure TSJWG1.Button6Click(Sender: TObject);
var
  lBizField : TBizField;
  lColumn: TDataGridColumn;
begin
  //动态增加列字段,并增加DataGrid列
  lBizField := TUserDataField.Create(nil);
  lBizField.DataSet := InfoBroker.Info.DataSets[0];//DataSetBrokerZDYSJJ1.DataSet;
  lBizField.ID :='GS';                            //设置字段ID
  lBizField.DataType := TDataType.dtFloat;          //设置字段类型
  lBizField.Size := 20;                            //设置字段大小
  lBizField.DisplayName := 'AA|公司';
  lColumn := TDataGridColumn(DataGrid.CreateColumnByClassName('TDataGridColumn'));
  // 字符串表示列的类型,可以是'TDataGridColumn', 'TDataGridImageColumn','TDataGridMaskColumn'
  lcolumn.Name:='TDataGridColumn'+'GS';
  lColumn.FieldName :='GS' ;//'KF'; // 邦定GUID字段
  Business.Forms.Dialogs.Showmessage('增加字段成功!');
end;

//动态删除刚才创建的字段
procedure TSJWG1.Button7Click(Sender: TObject);
var
  lBizField : TBizField;
  lColumn: TDataGridColumn;
begin
  //动态删除列字段,并删除DataGrid列
  lColumn := TDataGridColumn(DataGrid.ColumnByName('TDataGridColumn'+'GS'));
  lColumn.Free;
  DataGrid.Refresh;
  lBizField := InfoBroker.Info.DataSets[0].BizFieldByName('GS');
  lBizField.Free;
  InfoBroker.Info.DataSets[0].Refresh;
  Business.Forms.Dialogs.Showmessage('删除字段成功!');
end;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-7-3 18:12:29 | 显示全部楼层
下班了,明天再试。
回复 支持 反对

使用道具 举报

发表于 2007-7-4 08:48:28 | 显示全部楼层
ok,记得反馈结果哦。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-7-4 10:01:31 | 显示全部楼层
按七楼的方法可以实现删除字段,问题解决了,谢谢!可以结贴了。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-1-12 06:54 , Processed in 0.037038 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表