以文本方式查看主题 - 搭建论坛 (http://bbs.diylsoft.com:8118/starforum/index.asp) -- 用户咨询 (http://bbs.diylsoft.com:8118/starforum/list.asp?boardid=4) ---- 【建议】对“数据源”的“数据改变”事件修订 (http://bbs.diylsoft.com:8118/starforum/dispbbs.asp?boardid=4&id=25537) |
||||
-- 作者:pc_doctor -- 发布时间:2009-8-15 22:58:46 -- 【建议】对“数据源”的“数据改变”事件修订 大家一直讨论追求的实时更新字段内容(常规的需求是实时计算出结果)的问题,一直都没有一个好的方案。 通过实践,其实只要对“数据源”构件中的“数据改变”和“更改数据”两个事件进行修订即可。 一、现时问题:(比如:数据表中有字段:编号、姓名、数量、单价、金额等字段。现要求的是:只要“数量或单价字段内容发生变化,即刻计算出数量*单价=金额,并实时显示出来结果“金额”出来) 1、采用“数据源”中的“数据改变”或“更改数据”事件来设计:数量*单价=金额。那么就会造成死循环而死机。如果将 数量*单价=计算结果先存放在其他地方(如行编辑中),等数据表提交时将计算结果写入“金额”字段,这样尽管不死机,但并没有实时看见结果,特别是在某种提交之后即刻将记录剪切到其他表中时(这种应用很多,对数据安全应用很有效),就根本看不见金额值的。 这个问题的关键症结就是:“数据源”的“数据改变”和“更改数据”事件中不能指定“哪些字段的数据发生变化时,才引起事件的触发,而是只要任何数据变化就触发事件”,所以造成死循环。 二、解决之道: 1、在“数据表”或“数据源”的“属性”或“事件”中能指定“哪些字段的数据发生变化时,才引起事件的触发”就能解决问题。 一经这样修改,必将带来很大的数据管理便利。 |
||||
-- 作者:pc_doctor -- 发布时间:2009-8-15 23:18:05 -- 另,请Admin解释:在“数据表”和“ADO查询”事件中的“字段移动之前”、“字段移动之后”、“记录移动之前”、“记录移动之后”,这四个事件的具体作用和应用? 经测试:只有“记录移动之后”可以触发事件,其它三个事件都不能被触发起作用。 原本以为可以通过这个几个事件做点事的,结果未能有效。请大家测试之。 |
||||
-- 作者:引力波 -- 发布时间:2009-8-15 23:37:15 -- 经过测试,“字段移动之前”、“字段移动之后”、“记录移动之前”、“记录移动之后”,这四个事件有效。 |
||||
-- 作者:pc_doctor -- 发布时间:2009-8-15 23:40:42 -- 以下是引用引力波在2009-8-15 23:37:15的发言:
经过测试,“字段移动之前”、“字段移动之后”、“记录移动之前”、“记录移动之后”,这四个事件有效。 请引力波搞个简单的例子来证明,我测试是没有成功的。 请你也对一楼问题提出解决之道。 |
||||
-- 作者:引力波 -- 发布时间:2009-8-16 0:09:39 -- pc_doctor,你看看这个例子,尤其是当记录移动到最后一条,就显示的比较直观了
|
||||
-- 作者:pc_doctor -- 发布时间:2009-8-16 0:31:42 -- 以下是引用引力波在2009-8-16 0:09:39的发言:
pc_doctor,你看看这个例子,尤其是当记录移动到最后一条,就显示的比较直观了
谢谢! 但没有看懂该例子的实用意义。 我想的是:在“数据网格”或“纵向记录编辑”构件中的直接随着鼠标或光标在字段之间或记录之间的移动而发生的字段前后移动或记录前后移动而产生事件去计算“数量*单价=金额”并实时显示。 而你的例子是需要去点击一个按钮才作出一种反应,失去了字段移动或记录移动的直观理解意义。也许是我的理解有误吗?(我理解:在这个问题上,凡是直接利用外在动作都不是理想当中的字段移动或记录移动产生的事件的实际意义) |
||||
-- 作者:引力波 -- 发布时间:2009-8-16 8:38:20 -- 你要的效果实例,用鼠标移动记录发生的事件
|
||||
-- 作者:pc_doctor -- 发布时间:2009-8-16 11:16:50 -- 引兄,你的例子还是没有看见“字段移动”触发的事件啊。 |
||||
-- 作者:ming1973 -- 发布时间:2009-8-16 11:34:17 -- 这个我知道:你只要改变“操作数据”中的“字段号_X”的值,就会触发"字段移动"事件。 |
||||
-- 作者:ming1973 -- 发布时间:2009-8-16 11:35:55 -- 我以前看到过相关实例,只是想不起来是哪个了。 |