Foxtable(狐表)用户栏目专家坐堂 → [求助]父表更新,子表同步更新的问题


  共有2109人关注过本帖树形打印复制链接

主题:[求助]父表更新,子表同步更新的问题

帅哥哟,离线,有人找我吗?
nuhou
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:154 积分:1659 威望:0 精华:0 注册:2015/7/1 15:27:00
[求助]父表更新,子表同步更新的问题  发帖心情 Post By:2015/12/26 0:48:00 [只看该作者]

订单表和订单明细表通过“订单ID”关联,现在修改订单表的内容,怎么让明细表同步更新

 

原来用的是在订单表的DataColChanged里面用

DataTables("订单明细").DataCols("订单ID").RaiseDataColChanged()

实现

 

现在发现这个方法太耗资源,新增订单和修改订单内容的时候卡顿比较明显

 

请问有什么好的方法来实现,谢谢!


 回到顶部
帅哥哟,离线,有人找我吗?
Hyphen
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐神 帖子:5015 积分:25363 威望:0 精华:0 注册:2015/8/18 9:21:00
  发帖心情 Post By:2015/12/26 9:32:00 [只看该作者]


 回到顶部
帅哥哟,离线,有人找我吗?
Hyphen
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐神 帖子:5015 积分:25363 威望:0 精华:0 注册:2015/8/18 9:21:00
  发帖心情 Post By:2015/12/26 9:34:00 [只看该作者]

应该直接查找更新明细表的指定行数据,没必要刷新整个列

 回到顶部
帅哥哟,离线,有人找我吗?
nuhou
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:154 积分:1659 威望:0 精华:0 注册:2015/7/1 15:27:00
  发帖心情 Post By:2015/12/26 9:49:00 [只看该作者]

是用 RaiseDataColChanged(Filter) 吗


 回到顶部
帅哥哟,离线,有人找我吗?
nuhou
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:154 积分:1659 威望:0 精华:0 注册:2015/7/1 15:27:00
  发帖心情 Post By:2015/12/26 9:55:00 [只看该作者]

多列跨表更新

如果订单表有多列数据来自于产品表,一样可以采用类似的设计实现跨表更新。
例如,假定产品表和订单表通过产品编号联系起来(不一定建立了关联),订单表输入产品编号后,品名、型号、规格、单价四列内容从产品表自动继承输入。
为实现此目的,首先订单表
的DataColChanged事件代码应设置为:

If e.DataCol.Name = "产品编号" Then
    If e.NewValue Is Nothing Then
        e.
DataRow("品名") = Nothing
        e.
DataRow("型号") = Nothing
        e.
DataRow("规格") = Nothing
        e.
DataRow("单价") = Nothing
    Else
       
Dim dr As DataRow
        dr =
DataTables("产品").Find("[产品编号] = '" & e.NewValue & "'")
        If
dr IsNot Nothing

            e.
DataRow("品名") = dr("品名")
            e.
DataRow("型号") = dr("型号")
            e.
DataRow("规格") = dr("规格")
            e.
DataRow("单价") = dr("单价")
        End
If
   
End If
End
If

现在希望在产品表修改上述四列数据后,订单表能够自动更新这些列的数据,为此可以将产品表的DataColChanged事件设置为:

Select Case e.DataCol.Name
    Case
"品名","型号","规格",
"单价"
       
Dim Filter As String = "[产品编号] = '" & e.DataRow("产品编号") & "'"
       
Dim drs As List(Of DataRow) = DataTables("订单").Select(Filter)
        For
Each dr As DataRow In
drs
            dr(e.
DataCol.Name) = e.NewValue
        Next
End
Select

或者:

Select Case e.DataCol.Name
    Case
"品名","型号","规格",
"单价"
       
Dim Filter As String = "[产品编号] = '" & e.DataRow("产品编号") & "'"
        DataTables("订单").ReplaceFor(e.DataCol.Name, e.NewValue, Filter)
End
Select

可以看到不管是单列还是多列,自动更新的代码都一样的简洁。

 

 

应该是这个吧


 回到顶部
帅哥哟,离线,有人找我吗?
Hyphen
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐神 帖子:5015 积分:25363 威望:0 精华:0 注册:2015/8/18 9:21:00
  发帖心情 Post By:2015/12/26 10:10:00 [只看该作者]

是的


 回到顶部