父行和子行的同步刷新
我们知道刷新(重新加载)指定行的数据非常简单,只需执行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
显然代码看上去更简洁,但是有缺陷,因为无法加载他人新增的订单明细,也无法移除他人已经删除的订单明细,仅仅是更新已经加载的订单明细而已。