数据窗口逐层过滤的实现

   信息系统开发过程中你可能会收到这样的用户要求,“允许我在当前可见结果集中根据定义的条件过滤数据,与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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值