起步软件技术论坛-X3

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

【结贴】自定义字段赋值问题**

[复制链接]
发表于 2007-12-25 09:23:37 | 显示全部楼层 |阅读模式
我在信息中建了一个自定义数据集,并且已经建了5个字段.然后再用代码动态创建该数据集第6个字段,而且动态创建DataGrid的一个Column与之相连.但是给动态创建的这个字段赋值的时候却报错,说是找不到这个字段,是什么原因呢?
回复

使用道具 举报

发表于 2007-12-25 11:28:37 | 显示全部楼层
添加字段后需要重现打开数据集或者调用下面的语句
TBizDataSet(DataSetBrokerBZSJJ1.DataSet).LayoutChange;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-12-26 12:51:29 | 显示全部楼层
还是不行,调用数据集的LayoutChange和重新打开数据集都不行,还是报找不到动态创建的这个字段.
回复 支持 反对

使用道具 举报

发表于 2007-12-26 13:26:02 | 显示全部楼层
那看一下您的代码吧
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-12-26 15:53:55 | 显示全部楼层
var   lColumn :TDataGridColumn;
        lUserField :TBizField;
begin  
    //动态创建自定义数据集的一个字段
      lUserField := TUserDataField.Create(TJHWCQKFXB( InfoBroker.Info).DataSetJHWCQKFX);
      with lUserField do
      begin
        DataSet := TJHWCQKFXB(InfoBroker.Info).DataSetJHWCQKFX;
        ID := 'YHZD1';
        Name := 'YHZD1';
        DataType := TDataType.dtString;
        Size := 32;
        DisplayName := CT1.MC;
      end;
      //动态创建DataGrid的一个Column与之相连
      with  TJHWCDLBD(DocView1.Doc).DataGridEdit do
      begin
        lColumn := TDataGridColumn.Create(TJHWCDLBD(DocView1.Doc).DataGridEdit);
        lColumn.Name := 'TEMPYHZD1';
        lColumn.Width := 65;
        lColumn.Caption := CT1.MC;
        AddColumn(lColumn);
        lColumn.FieldName := 'YHZD1';
      end;

    TBizDataSet(TJHWCQKFXB(InfoBroker.Info).DataSetJHWCQKFX).LayoutChange;
    //数据集在主窗体创建时已经打开,在这里赋值
    TJHWCQKFXB(InfoBroker.Info).DataSetJHWCQKFX.FieldByName('YHZD1').AsString := '12';
end;


运行到最后这一句赋值语句时就报错,说找不到该字段'YHZD1'.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-12-26 16:22:19 | 显示全部楼层
姐姐,麻烦你帮我测一测,问题很急啊
回复 支持 反对

使用道具 举报

发表于 2007-12-26 16:24:23 | 显示全部楼层

TJHWCQKFXB(InfoBroker.Info).DataSetJHWCQKFX.FieldByName('YHZD1').AsString := '12';
放到数据集的afteropen事件中看一下
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-12-26 17:48:54 | 显示全部楼层
我在窗体创建时就给自定义数据集中已经定义的字段赋值了,然后通过点击窗体上的按钮触发动态创建数据集的字段并且赋值。如果把该动态创建字段的赋值语句写到AfterOpen事件里,当窗体创建的时候还没有创建'YHZD1'这个字段,依然报错。如果把全部的赋值语句(包括在数据集中已经定义的字段)写到AfterOpen事件中就好了,所有的字段都能找到。

但是我的需求是先给已经定义好的字段赋完值,然后通过点击按钮触发增加一个字段并给它赋值,而不是全部一起赋值。如果全部一起赋值的话那我还得再给已经定义的字段再赋一次值,那效率岂不是太低了?也不灵活啊
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-12-26 17:57:52 | 显示全部楼层
我研究了一下,也就是说,动态创建字段只能在数据集Close的时候创建,如果是Open状态的时候创建的话就找不到该字段。
回复 支持 反对

使用道具 举报

发表于 2007-12-26 22:16:53 | 显示全部楼层
字段只能在数据集close的时候创建,当自定义数据集被打开后,里面是没有数据的(记录数为零),然后通过代码的方式对自定义数据集中的字段进行赋值。
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-4 11:09 , Processed in 0.042583 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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