起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 461|回复: 13

【结贴】主从数据界面刷新问题

[复制链接]
发表于 2009-12-14 12:12:53 | 显示全部楼层 |阅读模式
如界面
出差类别 借款人等为主数据 出差类别设置了查找属性 0 国内 1 国外
借款信息为子数据 借款币种设置了查找属性 0 人民币 1 美元
需求 在主数据出差类别字段改变的时候 默认借款币种 即选择国内出差 借款币种默认为人民币 国外出差默认为美元
代码是在主数据集的DataChange事件中对子数据的借款币种进行设置
问题是 设置之后界面没有刷新 进入界面的时候默认是国内 人民币 选择国外后 子数据已经修改为美元 但是界面还是显示人民币 只有鼠标点钟借款币种那个单元格的时候 才会变为美元
如何解决此问题 不需要鼠标点击 自动刷新

未命名.jpg

24.69 KB, 下载次数: 217

回复

使用道具 举报

发表于 2009-12-14 12:33:26 | 显示全部楼层
楼主,你是要根据出差类别的选择,来动态关联借款币种,对吧?
那你就设置借款币种的自动填充--查找填充的方式。
http://bbs.justep.com/forum.php?mod=viewthread&tid=20735
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-12-14 12:59:26 | 显示全部楼层
我是根据主表选择的改变 修改子表的借款币种 你说的这个设置自动填充的话
查找过滤中如何获取主表选择的出差类别数据?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-12-14 13:08:53 | 显示全部楼层
我已经用代码把值改了 比如在界面上方一个按钮 按钮的单击就是修改子数据集的借款币种 dssub.fieldbyname('借款币种'):=1  这时候值已经是1  但是界面不刷新 不能显示出1对应的美元 鼠标点到单元格的时候就显示美元了
回复 支持 反对

使用道具 举报

发表于 2009-12-14 13:09:31 | 显示全部楼层
这样吧, 你把你做的贴出来看看吧。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-12-14 13:16:38 | 显示全部楼层
首先定义了借款币种的查找属性 数据源来自配置表 0 人民币 1 美元
//主数据字段修改 出差类别修改 默认币种等信息
procedure TMainForm.dsbEvecMainDataChange(Sender: TObject; Field: TDataField);
var
    CurrentLoanNo:string;
begin
    if Field<>nil then
    begin
        dsbEvecMain.DataSet.Open;
        CurrentLoanNo:=dsbEvecMain.DataSet.FieldByName('CurrentLoanNo').AsString;
        if Field.FieldName='EvecType' then  //出差类别修改
        begin
            if Field.AsString='0' then  //国内出差
            begin
                //币种默认为人民币
                dsbEvecSub.DataSet.Open;
                dsbEvecSub.DataSet.Edit;
                dsbEvecSub.DataSet.FieldByName('LoanUnit').AsString:='0';
                TBizDataSet(dsbEvecSub.DataSet).BizFieldByName('LoanTotal').Attributes.ReadOnly.Text:='false';
            end
            else if Field.AsString='1' then  //国外出差 币种默认为美元
            begin
                dsbEvecSub.DataSet.Open;
                dsbEvecSub.DataSet.Locate('CurrentLoanNo',CurrentLoanNo,[]);
                dsbEvecSub.DataSet.Edit;
                dsbEvecSub.DataSet.FieldByName('LoanUnit').AsString:='1';
                //借款金额不允许填写 系统计算
                TBizDataSet(dsbEvecSub.DataSet).BizFieldByName('LoanTotal').Attributes.ReadOnly.Text:='true';
            end;
        end
        else if Field.FieldName='EcevStartDate' then
        begin
            dsbEvecMain.DataSet.Open;
            if dsbEvecMain.DataSet.FieldByName('EvecEndDate').AsString<>'' then
            begin
                //计算借款金额
                CaculateLoanTotal();
            end;
        end
        else if Field.FieldName='EvecEndDate' then
        begin
            dsbEvecMain.DataSet.Open;
            if dsbEvecMain.DataSet.FieldByName('EcevStartDate').AsString<>'' then
            begin
                //计算借款金额
                CaculateLoanTotal();
            end;
        end;
    end;
end;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-12-14 13:17:41 | 显示全部楼层
这段代码执行后的效果就是 选择了国外后 界面没有变化 币种显示的还是一进入界面时默认的人民币 当鼠标点到借款币种这个单元格的时候 格的内容就显示成美元了 不点不刷新
回复 支持 反对

使用道具 举报

发表于 2009-12-14 13:25:00 | 显示全部楼层
我做了个例子

录像1.rar

526 KB, 下载次数: 134

回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-12-14 13:45:22 | 显示全部楼层
我这还是不行 我的是主从关系的 能否远程帮我看一下
回复 支持 反对

使用道具 举报

发表于 2009-12-14 13:56:13 | 显示全部楼层
我的也是主从数据集。
我加你qq了。
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-13 17:37 , Processed in 0.045286 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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