PB 关于DDDW中的模糊搜索定位问题,求教。。

mlwstc 2018-04-18 04:35:46
我在DW中其中一个字段使用了DDDW风格,关联了数据,动态获取datawindowchild,我想实现输入其中部分字符串的时候能模糊定位,比如说我的DDDW字段里有AB-1,AB-2,AB-3,这些数据,我在输入时输入 AB, 或者 B-1 ,或者 -1 都能定位出第一次搜索到的数据行,然后SCROLL到该行。

我是在editchanged 事件里写的代码。

最开始用的SETFILTER,但是这个DW我需要一次插入多行数据,用这个方式,第2行数据在选择DDDW字段的时候会影响第一行,所以不能用。

然后改成FIND,网上查了资料, find里的表达式用 LIKE 或者 POS 都不行,没有效果,始终只能查询首字母或者从第一个字母开始的字符串,比如查 AB, AB-, AB-1 都行,但是如果查询B-1,就不行。

然后发现如果不使用FIND,把editchanged事件里代码都注释掉,还是能实现首字母定位的功能,这个应该是PB自带的,我本来打算用getitem循环取出DDDW中的所有行,然后用POS函数判断输入的字符是否存在其中,如果存在就SCROLL到该行,运行后发现这种方式和PB自带的自动定位首字母的功能冲突,而且是先执行了editchanged事件里的代码后,再触发的首字母定位功能,导致我写的代码完全无效。。。。


求教高手。。。想了好久,一直没办法解决这个问题。。。
...全文
1093 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
hxbkkk 2018-05-04
  • 打赏
  • 举报
回复
楼上很详细了,editchanged 要注意ACCEPT事件配合
a79486738 2018-04-24
  • 打赏
  • 举报
回复
DW的editchanged事件: //////////////////////////////////// DataWindowChild ldwc_name This.GetChild('kh_xz',ldwc_name) ldwc_name.SetTransObject(SQLCA) string ls_kh ls_kh=trim(this.Describe ( "Evaluate('LookupDisplay(kh_xz)',1)" )) If len(ls_kh) = 0 Then ldwc_name.SetFilter('') ///清除过滤 ldwc_name.Filter() ldwc_name.Retrieve() else ldwc_name.SetFilter("(kh_name like '%"+ls_kh+"%') or (kh_pym like '%"+ls_kh+"%')") ldwc_name.Filter() ldwc_name.Retrieve() End If ///////////////////////////////////// 参考一下,SCROLL没写,自己写下把, 是不是这个意思???
qinxueyuan 2018-04-23
  • 打赏
  • 举报
回复
find用POS可以的,find("pos(a,'B')>0",1,1000)

610

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder DataWindow
社区管理员
  • DataWindow社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧