如何设置加载条件

通过DataTables的Load方法加载表的时候,同样会触发BeforeLoadInnerTable(内部表)或BeforeLoadOuterTable(表)事件,可以通过这两个事件设置数据加载条件。

你也许会奇怪,前面不是通过BeforeLoadInnerTable和BeforeLoadOuterTable的Cancel参数,来实现初始不加载表的目的吗? 再次触发这两个事件,Cancel参数还是为True,怎么能正常加载表呢? 不用担心,Cancel参数只有在打开项目的时候才有效,所以我们依然可以通过这两个事件实现初始不加载表和设置加载条件的双重目的。

示例一

假定订单表是内部表,希望订单表只加载当日的订单,但是打开项目是,初始并不加载订单表,为此可将BeforeLoadInnerTable事件代码为:

If e.DataTableName = "订单" Then
    e.Cancel = True '打开项目的时候不加载此表
    e.Filter = "日期 = #" & Date.Today & "#" '设置加载条件

End
If

当项目启动后,我们随时可以通过下面的代码将订单表加载进来,且只加载当日的订单:

If DataTables.Contains("订单") = False
    DataTables.
Load("订单")
End If

示例二

假定订单表是外部表, 希望初始并不加载订单表,而是在运行过程打开加载树进行分页加载,为此可将BeforeLoadOuterTable事件代码为:

If e.DataTableName = "订单" Then
    e.Cancel = True '打开项目的时候不加载此表
    e.SelectString = "Select * From {订单} Where [_Identify] Is Null" '设置加载条件,注意如果主键不是_Identify,请改为实际的主键名称

End
If

当项目启动后,我们随时可以通过下面的代码将订单表加载进来,并打开加载树进行分页加载:

If DataTables.Contains("订单") = False Then
    DataTables.
Load("订单") '加载订单表,注意由于BeforeLoadOuterTable事件设置的代码,执行后只加载了结构,没有数据
End If
Tables(
"订单").OpenLoadTree("日期 YM",150,30,True) '打开加载树,加载树宽度150个像素,分页加载,每页30行
MainTable = Tables(
"订单") '切换到订单表


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