关联与动态加载
假定有两个表,分别是订单和订单明细,两者通过"订单ID"列关联起来,订单是父表,订单明细是子表,因为每个订单对应有若干订单明细。
如果订单表采用加载树加载,按年月每页加载10个订单,显然一个合格的系统,应该同时加载这10个订单的订单明细。
要完成这样的任务,其实非常简单。
设计步骤:
1、首先将BeforeLoadInnerTable事件代码设置为:
Select
Case e.DataTableName
Case "订单","订单明细"
e.Filter = "[_Identify] Is Null"
End Select
确保订单表和订单明细表在初始状态不会加载任何数据。
2、然后在AfterOpenProject事件中加入代码:
Tables
("订单").OpenLoadTree("订购日期 YM",120,10)
这样项目打开后,将自动显示订单表的加载树。
3、将订单表的AfterLoad事件设置为:
Dim
ids As String
For Each dr As DataRow In DataTables("订单").DataRows
ids = ids & "," & dr("订单ID")
Next
ids= ids.Trim(",")
DataTables("订单明细").LoadFilter = "订单id In (" & ids & ")"
DataTables("订单明细").Load()
至此,我们这个关联加载系统已经完工,前后不过12行代码。
提示:
1、上面的例子是针对内部数据表的,如果使用的是外部数据源,那么第一步可以省略,只需在设置外部数据表的时候,将加载条件设置为“[_Identify] Is Null”。
示例文件:
[此贴子已经被作者于2010-12-16 23:24:55编辑过]