父行和子行的同步刷新

我们知道刷新(重新加载)指定行的数据非常简单,只需执行DataRow或者Row的Load方法即可,例如重新加载订单表的当前行数据:

Tables("订单").Current.Load()

如果两个表之间建立了关联,希望重新加载某一父行数据后,也需要重新加载该父行对应的全部子行。
例如订单表和订单明细表通过订单编号建立了关联,希望重新加载当前订单及其订单明细,代码为:

Dim r As Row = Tables("单").Current
Dim
fl As String = "订单编号 = '"  & r("订单编号") & "'"
r.Load()
'加载父行
LockBaseMainForm
() '锁定主窗口
DataTables
("单明细").StopRedraw '停止绘制订单明细
DataTables
("单明细").RemoveFor(fl) '移除当前订单的订单明细
DataTables
("单明细").Appendload(fl) '追载当前订单的订单明细
DataTables
("订单明细").ResumeRedraw '恢复绘制订单明细
UnLockBaseMainForm()
'解锁主窗口

代码的原理是 首先刷新当前订单,然后用RemoveFor移除该订单对应的全部订单明细,最后用AppendLoad追载该订单对应的全部订单明细。

很多人可能会习惯这样写代码:

Dim dr As DataRow = Tables("订单").Current.DataRow
dr.Load()

For Each
cr As DataRow In dr.GetChildRows("订单明细")
    cr.Load()

Next

显然代码看上去更简洁,但是有缺陷,因为无法加载他人新增的订单明细,也无法移除他人已经删除的订单明细,仅仅是更新已经加载的订单明细而已。


本页地址:http://www.foxtable.com/webhelp/topics/2896.htm