|
可是有一个缺点,他的运算符里面只有 like ,没有包含。 比如:我要找一个姓名包含‘国’字的人。 运算符必须得选 like 表达式则是:%国% 这样很多人就不懂得用了。 如何使它无需加%%就能过滤出名字包含‘国‘的人? |
用户输入“国”,你的代码就要包上%号。
|
|
关键是在哪里的代码加上%号?
|
|
用户输入查询条件之后,一般都要再点击一个“查询”按钮才开始查询吧?
你就在按钮事件中加%嘛。 |
|
这个查询对话框要cxGrid自带的,不是我们自己设计的啊
|
|
二楼没明白楼主的意思。同求解决方法
|
|
自己顶一下.... 难道没人遇到这个问题?
|
|
lz的需求, 只能改dev的代码实现
like的匹配情况有: %国% 国% %国 你需求的[包含], 匹配情况只有: %国% |
|
我也不知道要改Dev的代码,可跟踪来跟踪去,就是不知道要在哪改!
|
|
思路:
应该在过滤窗体中找到确定这个按钮,然后更改生成出来的过滤字串。 于是,找到 cxFilterControlDialog.pas ,查看 OK 按钮的 OnClick 事件 发现里面只有一条语句: ApplyFilter; 于是,再跟踪 ApplyFilter 函数,它的声明如下: procedure ApplyFilter; virtual;
继续跟踪 DoBeforeApply ,发现其也是一个虚方法:
又发现 FOnBeforeApply 的声明为: FOnBeforeApply: TNotifyEvent; 到这,就不懂得如何往下跟踪了... |
|||||
filterControl.ApplyFilter;
filterControl 这个对象在哪? 在这个单元好像没找到这个对象 不知道是引引哪个单元的东东 |
|
1 把这个文件复制到你的程序目录
\DevExpress VCL\ExpressDataController\Sources\cxFilter.pas 2 TcxFilterCriteria.AddItem过程做如下修改:(自动给like, not like运算的查询条件加%)
|
|||
非常感谢这位仁兄的帮助,问题解决了一半,按照你的方法,确实可行,但只适用于这个界面:
对于下面这个界面没有效果: |
|
之前的修改全部取消. 一下改动完成后, 所有使用该文件做过滤的, like, not like 都会受影响 ------------------------------------------------------- 把这个文件复制到你的程序目录 \DevExpress VCL\ExpressDataController\Sources\cxLike.pas function LikeStr(const AStr, APatternStr: string; APercent, AUnderline: Char): Boolean; var vPatternStr : string; begin vPatternStr := Format(‘%%%s%%‘, [APatternStr]); Result := Like(PChar(AStr), Length(AStr), PChar(vPatternStr), Length(vPatternStr), APercent, AUnderline, #0); end; |
|
非常感谢 simonhehe 的热心助助!!问题解决,分不多,全给你了。
|
|