Foxtable(狐表)用户栏目专家坐堂 → [注意]帮助中,“父表和子表同步加载之三”动态合成表达式有误,请修改


  共有2715人关注过本帖树形打印复制链接

主题:[注意]帮助中,“父表和子表同步加载之三”动态合成表达式有误,请修改

帅哥哟,离线,有人找我吗?
hawkgo
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:236 积分:1881 威望:0 精华:0 注册:2013/11/7 14:40:00
[注意]帮助中,“父表和子表同步加载之三”动态合成表达式有误,请修改  发帖心情 Post By:2015/8/11 9:35:00 [只看该作者]

父表和子表同步加载之三

前面讲述的同步加载,都是在父表加载完成后,将父表已加载行的全部子行加载进来,这种方式很实用,符合大多数场合的需求。

如果父表中每一行,在子表中对应有很多子行,或父表一次加载的数据量比较大,也许此时你并不希望将子表对应的数据全部加载进来。

例如我们可以在选择某个订单进行处理的时候,才加载此订单对应的订单明细进来,避免一次加载子表过多的数据。
为此只需将订单表的CurrentChanged事件中加上代码:

If e.Table.Current IsNot Nothing Then
   
DataTables("订单明细").LoadFilter = "订单编号 = " & e.Table.Current("订单编号"

 须要改成: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("订单编号"

须要改成: Dim Filter As String = "订单编号 = " & e.Table.Current("订单编号") &"'"
    If  DataTables(
"
订单明细").Find(Filter) Is Nothing Then '如果对应的订单明细没有加载过
        DataTables(
"
订单明细").AppendLoad(Filter) '则追载此订单的订单明细
    End
If

End
If

这里采用AppendLoad来追载没有加载过的订单明细,避免了重复加载,效率远远好过第一个方案。


 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/8/11 9:40:00 [只看该作者]

 例子里面的 订单编号 是数值类型,可以不加单引号。

 

 当然,你这样写更完善。


 回到顶部
帅哥哟,离线,有人找我吗?
hawkgo
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:236 积分:1881 威望:0 精华:0 注册:2013/11/7 14:40:00
  发帖心情 Post By:2015/8/11 23:03:00 [只看该作者]

红袍兄弟,谢谢!
你说的对,我没有考虑数值型的问题。

 回到顶部