父表和子表同步加载之三
前面讲述的同步加载,都是在父表加载完成后,将父表已加载行的全部子行加载进来,这种方式很实用,符合大多数场合的需求。
如果父表中每一行,在子表中对应有很多子行,或父表一次加载的数据量比较大,也许此时你并不希望将子表对应的数据全部加载进来。
例如我们可以在选择某个订单进行处理的时候,才加载此订单对应的订单明细进来,避免一次加载子表过多的数据。
为此只需将订单表的CurrentChanged事件中加上代码(假定订单编号是整数型):
If
e.Table.Current
IsNot Nothing
Then
DataTables("订单明细").LoadFilter
= "订单编号 = " &
e.Table.Current("订单编号")
Else
DataTables("订单明细").LoadFilter
= "[_Identify] is null"
End
If
DataTables("订单明细").Load()
这样我们选择某行订单,就会自动加载对应的订单明细。
上面的代码也有不足,例如处理A订单的时候,会自动加载A订单的明细,当处理完B订单后再回到A订单,又得重新加载一次A订单的订单明细,显然这种重复加载是一种"浪费"。
我们可以再完善一下代码,避免数据重复加载:
If
e.Table.Current
IsNot Nothing
Then
Dim
Filter As
String = "订单编号
= "
& e.Table.Current("订单编号")
If DataTables("订单明细").Find(Filter)
Is Nothing
Then
'如果对应的订单明细没有加载过
DataTables("订单明细").AppendLoad(Filter)
'则追载此订单的订单明细
End
If
End
If
这里采用AppendLoad来追载没有加载过的订单明细,避免了重复加载,效率远远好过第一个方案。