以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [求助]刷新不实时 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=184800) |
-- 作者:mengxxaa -- 发布时间:2023/1/4 10:03:00 -- [求助]刷新不实时 1.在前端对数据或者删除一些行之后,前端没有看到实时更新的结果,要重新登录系统才能看到。 2.在子表上删除一些数据后,父表有些行没有相应的变动。 Select Case e.DataCol.Name Case "so_oder_qty", "so_shp_qty" If e.DataRow.IsNull("so_oder_qty") OrElse e.DataRow.IsNull("so_shp_qty") Then If e.DataRow.IsNull("so_shp_qty") Then e.DataRow("so_stutas") = "未执行" e.DataRow.Locked = False End If Else If e.DataRow("so_oder_qty") > e.DataRow("so_shp_qty") Then e.DataRow("so_stutas") = "执行未完结" e.DataRow.Locked = False Else e.DataRow("so_stutas") = "执行完毕" e.DataRow.Locked = True End If End Select |
-- 作者:有点蓝 -- 发布时间:2023/1/4 10:05:00 -- 代码是在哪个表的? [此贴子已经被作者于2023/1/4 10:05:31编辑过]
|
-- 作者:mengxxaa -- 发布时间:2023/1/4 10:07:00 -- 代码是在父表上。 “在前端对数据或者删除一些行之后,前端没有看到实时更新的结果,要重新登录系统才能看到”,这个问题也是看你发出来的帮助链接吗?
|
-- 作者:有点蓝 -- 发布时间:2023/1/4 10:10:00 -- 仔细看帮助,还要在子表写代码通知父表数据有更新了: 所以有必要考虑用另一重算方法,将订单表的DataColChanged事件代码设置为: Select Case e.DataCol.Name 代码的原理是,当订单表中数量、单价、折扣三列中任何一列的内容发生变化,就从统计表中找出对应产品所在的行,然后“欺骗性”地通知系统该行的产品列内容发生了变化,于是触发统计表的DataColChanged事件,重算 此行的数量和金额。 |
-- 作者:mengxxaa -- 发布时间:2023/1/4 15:14:00 -- 已经在子表中写了通知父表有更新的代码: If e.DataCol.name = "dnd_qty" Then Dim pr As DataRow = e.DataRow.GetParentRow("so_det") \'找出对应的父行 If pr IsNot Nothing Then DataTables("so_det").DataCols("so_shp_qty").RaiseDataColChanged(pr) \'通知系统此父行的数量列发生了改变,触发DataColChanged事件 End If End If 有了这个代码,只要子表中的dnd_qty发生了变化,父表中对应行的so_shp_qty也跟着变化,但是没有触发父表其他列也跟着变。 看了帮助,还是有疑问,帮助的例子中,统计表的产品是不重复唯一的,而我的子表中的产品在父表中存在多行。希望老师指点一二 |
-- 作者:有点蓝 -- 发布时间:2023/1/4 15:22:00 -- so_shp_qty是表达式列? |
-- 作者:mengxxaa -- 发布时间:2023/1/4 15:34:00 -- so_shp_qty在父表中是表达式,看了帮助中: 首先将统计表的DataColChanged事件代码设置为: If e.DataCol.Name = "产品" Then 同样在统计表设置好上述代码后,请重置一次该表的产品列。 订单表的金额列是一个表达式列,其表达式为:[数量] * [单价] * (1 - [折扣]) Select Case e.DataCol.Name 我的理解,帮助中的例子,统计表是父表,订单表是子表。只有子表中存在表达式列,才需要以上代码。父表中表达式列也不会触发吗?该怎么处理呢? |
-- 作者:有点蓝 -- 发布时间:2023/1/4 15:50:00 -- 表达式列都无法触发事件,和父表还是子表没有什么关系:http://www.foxtable.com/webhelp/topics/2381.htm |
-- 作者:mengxxaa -- 发布时间:2023/1/4 16:33:00 -- 现在是用最笨的办法解决,就是选中父表中的so_shp_qty列,选择“重置列”。试了几个代码都不行,求老师给自动触发的代码吧。 |
-- 作者:有点蓝 -- 发布时间:2023/1/4 16:38:00 -- 帮助已经说得很明白了 但是上述代码是无效的,因为作为表达式列,C列发生变化的时候,并不会触发DataColChanged事件。 我们可以换个思路,既然C列是有A列和B列计算得出,那么C列发生变化,肯定是因为A列或B列发生变化引起的。 Select Case e.DataCol.Name |