以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]父表更新,子表同步更新的问题  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=79198)

--  作者:nuhou
--  发布时间:2015/12/26 0:48:00
--  [求助]父表更新,子表同步更新的问题

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

 

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

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

实现

 

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

 

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


--  作者:Hyphen
--  发布时间:2015/12/26 9:32:00
--  

http://www.foxtable.com/help/topics/1644.htm

 

http://www.foxtable.com/help/topics/1453.htm

 


--  作者:Hyphen
--  发布时间:2015/12/26 9:34:00
--  
应该直接查找更新明细表的指定行数据,没必要刷新整个列
--  作者:nuhou
--  发布时间:2015/12/26 9:49:00
--  

是用 RaiseDataColChanged(Filter) 吗


--  作者:nuhou
--  发布时间: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
--  发布时间:2015/12/26 10:10:00
--  

是的