另类筛选技巧
筛选只能通过表达进行的,例如:
Tables("订单").Filter = "[产品] = 'PD01'"
菜单中的筛选命令,也只是将用户的操作转换为筛选表达式而已。
但是表达式的表述能力是有限的,现实中一些复杂的筛选,可能没有办法用表达式来实现,那么应该如何来满足这样的需要呢。
实现的思路是,在表中增加一个表达式列,但是不设置表达式,并将其隐藏起来,当我们进行一些复杂的逻辑筛选式,可以逐行进行计算,将结果保存在这个临时列中,至于这个表达式列的数据类型,可以根据需要选择,我个人觉得用整数型列较为合适。
示例
要从订单表中筛选出各月上旬的订单:
1、预先可以通过代码或者菜单命令,增加一个整数型的表达式列,列名随便取,这里姑且命名为"ms",并将其隐藏起来。
2、定义一个窗口按钮或者菜单按钮,用于筛选,Click事件代码为:
For Each
dr As DataRow In DataTables("订单").DataRows
If dr.IsNull("日期") Then
dr("ms") = "0"
Else
dr("ms") = dr("日期").Day
End If
Next
Tables("订单").Filter = "ms >= 1 and ms <=10"
这样单击次按钮,即可筛选出每月上旬的订单。
这里只是提供了一个方法,你可以用这个方法完成各种任意复杂的筛选,实际上,Foxtable本身的排除重复内容筛选,就是用这个方法实现的。
需要特别提醒的是,用于辅助筛选的列,必须是表达式列,不能是数据列,否则会严重影响执行和存取性能。
[此贴子已经被作者于2009-3-20 10:07:05编辑过]