信息系统开发过程中你可能会收到这样的用户要求,“允许我在当前可见结果集中根据定义的条件过滤数据,与GOOLGE或百度的在结果中搜索功能类似”。
PB虽然未直接提供该项功能,但实现起来也是非常简单。通常有两种方法:一、使用find函数直接将不符合条件的数据移到过滤区,二、将当前过滤区数据移走,然后使用setfilter函数过滤,再将移走的数据移回过滤区。方法一相对而言性能要差些,因为它要经历循环查找。在此笔者介绍第二种方法,你可以将of_filterinresult函数保存在你的数据窗口或数据存储祖先中。
附:of_filterinresult函数源代码。
/*******************************************************************
函数名称:of_filterinresult()
参数: as_filterexpr string 过滤条件
返回值: integer 是否成功(1表示成功,-1表示失败)
功能描述:在结果集中过滤
创建人: 康剑民
创建日期:2009-02-19
版本号: V1.0
*******************************************************************/
long ll_filtered_count
integer li_return
ll_filtered_count = this.filteredcount()
//将过滤缓冲区数据移动到删除缓冲区
if ll_filtered_count > 0 then
this.rowsmove(1,ll_filtered_count,filter!,this,this.deletedcount()+1,delete!)
end if
//执行过滤
li_return = this.setfilter(as_filterexpr)
this.filter()
//将删除缓冲区中本属于过滤缓冲区的数据移回到过滤缓冲区
if ll_filtered_count > 0 then
this.rowsmove(this.deletedcount() - ll_filtered_count + 1,this.deletedcount(),delete!,this,1,filter!)
end if
return li_return
附:of_filterinresult函数说明。
of_filterinresult函数
来 源: 新建
语 法: integer dwname.of_filterinresult(as_filterexpr)
功 能: 在结果集中过滤
访问等级: public
参 数: string as_filterexpr过滤条件
返 回 值: integer。1表示成功,-1表示失败。
使用方法: 程序需要处调用,如在执行逐层过滤的按钮clicked事件。
使用举例:
例1 下面的例子出自cb_filterinresult.clicked事件,sle_filterexpr为输入过滤条件的单行编辑框:
Dw_1.of_filterinresult(sle_filterexpr.text)
参 考: 无
作者:康剑民 kangjianmin@139.com
写作日期:2009-02-19