起步软件技术论坛
搜索
 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 4366|回复: 4

[分享] 主表中的总数量等于从表中数量的总计,SUM功能的深入分析

[复制链接]

851

主题

2560

帖子

5714

积分

论坛元老

Rank: 8Rank: 8

积分
5714
QQ
发表于 2019-6-2 22:42:05 | 显示全部楼层 |阅读模式
本帖最后由 wgs7909 于 2019-6-17 14:32 编辑

X5的数据组件,提供了丰富且人性化的自动计算功能,为开发都带来了很大的方便。
不过想把这个功能更深入的应用到项目里,还是需要多动动脑子的。
情景描述:
有两个表,主表和从表,以列表详细的形式表现。列表页面当然显示的是主表的数据,详细页面中上半部分显示主表数据,下半部分是从表的列表。
需求:
主表中有两个关系,1:总数量,是从表中数量的合计。2:总条数,是从表中行的总数量。
错误的做法(也是我原来的做法,也可能是我脑子转的慢,没想开的原因吧):
在主表中加入一个计算列,通过valueChanged事件监听值是否改变,如果值发生改变,就把新值setValue给主表中的总数量关系。
在主表中加入一个计算列,在计算关系中增加自动计算从表条数的方法,跟上面一条同理,当值变化后,给主表的总条数重新setValue
如果主表中只有一条记录的话,上面的方案没有问题。反之,问题就来了。当主表的行索引发生变化的时候,会引起计算关系的重新计算,因为此关系采用的是引用模式,所以此变化会导致主表中所有行的计算列都变成这个重新计算的值了。
仔细想想,页面刚加载上来的时候,主表数据都已经加载上来了,但是从表只有对应主表第一条的数据被加载了。其它数据都没有被加载,这时计算关系中的值是0。只要主表指针发生变化,就会触发两个计算关系,它两的值发生了改变,所以会对主表中的数据库字段进行重新赋值,这样会导致主表的保存按钮变亮。用户会感觉到很奇怪,并没有改过数据,但为什么保存就变亮了呢?这不是主要问题,主要问题是,在多个用户终端在对这个页面进行操作的时候。。。。。。。

微信图片_20190602231451.png


企业应用定制开发。X5开发者。
手机:15065117236
QQ:87356667

4

主题

10

帖子

88

积分

初级会员

Rank: 2

积分
88
QQ
发表于 2019-6-4 21:03:36 | 显示全部楼层
我和你的错误想法一样,然后呢?
回复 支持 反对

使用道具 举报

851

主题

2560

帖子

5714

积分

论坛元老

Rank: 8Rank: 8

积分
5714
QQ
 楼主| 发表于 2019-6-5 08:19:20 | 显示全部楼层
liubin702 发表于 2019-6-4 21:03
我和你的错误想法一样,然后呢?

不好意思,然后我很忙。先干活。
我自己是理解了,明白了。我需要花点时间整理思路,用一个条理清晰的方式,分享给大家。
给我点时间。8号之前完成。
企业应用定制开发。X5开发者。
手机:15065117236
QQ:87356667
回复 支持 反对

使用道具 举报

4

主题

10

帖子

88

积分

初级会员

Rank: 2

积分
88
QQ
发表于 2019-6-11 23:37:35 | 显示全部楼层
8号过了,等你的高见。
回复 支持 反对

使用道具 举报

851

主题

2560

帖子

5714

积分

论坛元老

Rank: 8Rank: 8

积分
5714
QQ
 楼主| 发表于 2019-6-17 14:43:19 | 显示全部楼层
因为时间关系 ,我不论证过程了,我直接给出我以为是最优的方案吧!
主表中加入一个数据库关系,用来保存从表中数据列的SUM,在从表中的dataChange事件(注意是dataChange,而不是valueChanged)中判断改变的列,是不是要求和的数据列,再加一个判断条件,此条件很重要,event.type==valueChanged。
上面两个条件都成立的时候,重新对主表中当前行的总数进行赋值操作,其值为从表中数据列的sum值。

对于上面的方案,我经过了大量的测试与自我论证,感觉没有什么漏洞了。希望与高手及管理员们一起探讨。真理越辩越明!
企业应用定制开发。X5开发者。
手机:15065117236
QQ:87356667
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|X3技术论坛|Justep Inc.    

GMT+8, 2024-4-26 14:55 , Processed in 0.086322 second(s), 26 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

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