首页 > 其他分享 >delphi cxGrid过滤器配合TFDQuery过滤器,完美!

delphi cxGrid过滤器配合TFDQuery过滤器,完美!

时间:2023-02-16 20:44:50浏览次数:44  
标签:LIKE delphi cxGrid TFDQuery StringReplace 过滤器 NewStr

效果图:

 

 设计图(数据库是ACCESS类型):

 

 

 需求:

  1.cxGrid默认的模糊匹配符为%,太麻烦了,想用*号代替 (ACCESS数据库,只认*,不认%)

  2.cxGrid默认是在用户输入的字符后面加%,但是我需要在前面也要加上,即  %用户输入% ,按要求1的写法就是  *用户输入*.也就是进行包含过虑

实现:

  1.设置属性:DataController --Filter.PercentWildCard:=  *

  

 

 2.设置搜索框于表头之下

  

 

 ApplyChanges是执行过滤的时机.如果你选择了fracDelayed,则可进一步对ApplyInputDelay进行时间设置,默认为1000ms.

info Text可以修改无搜索时的方案

如果你需要美化搜索框,请自行设计style下的FilterRowInfoText.

 

 3.cxGrid的强大是不可否认的,但是它的过滤器难用也是不得不承认的.我也是搜索了半天资料,然后放弃了,最后还得是TFDQuery的过滤器..

这里得调用cxGrid的 DataController --Filter--OnBeforChange事件,以下是全部代码:

procedure TForm1.cxGrid1DBTableView1DataControllerFilterBeforeChange(Sender:
  TcxDBDataFilterCriteria; ADataSet: TDataSet; const AFilterText: string);
var
  ROld, RNew, OldStr, NewStr: string;
begin
  ROld := ' LIKE ''';
  RNew := '] LIKE ''' + '*';  //数据为ACCESS.已设置属性DataController.filter.percentwildcard:=*
  //处理过滤条件,替换字符串
  NewStr := StringReplace(AFilterText, RNew, ROld, [rfReplaceAll, rfIgnoreCase]); //先替换 ] LIKE '* 为    LIKE '
  NewStr := StringReplace(NewStr, ROld, RNew, [rfReplaceAll, rfIgnoreCase]); //再统一把  LIKE '替换为 ] LIKE '*
  NewStr := StringReplace(NewStr, '*', '%', [rfReplaceAll, rfIgnoreCase]);
  NewStr := StringReplace(NewStr, '(', '([', [rfReplaceAll, rfIgnoreCase]);

  FDQuery1.Filtered := False;
  FDQuery1.Filter := NewStr;
  FDQuery1.Filtered := True;
  self.Caption :=  AFilterText+' | '+  NewStr;
end;

上面的几个StringReplace方法是为了把cxGrid过滤器上的内容,转化为TFDQuery过滤器可用的内容.这里顺便说一下TFDQuery过滤器的规格:

1.字段要用 [ ] 括起来

2.不带 where 关键字

3.FDQuery1.Filtered := True; 时会立即过虑内容,如果有设置OnFilterRecord事件的话,OnFilterRecord也随后被执行.

4.修改过虑条件前,记得先关闭过滤器

 

标签:LIKE,delphi,cxGrid,TFDQuery,StringReplace,过滤器,NewStr
From: https://www.cnblogs.com/yoooos/p/17128231.html

相关文章

  • Delphi的编译指令
    写给Compiler看的特别指示,就是编译指令。编译指令时给计算机看的,用于区别在不同的场合下进行编译不同代码的文件一些常用的条件编译指令条件编译指令含义:$DEFINE//......
  • delphi 弹出选择目录对话框(选择文件夹)
    弹出选择目录对话框(选择文件夹)代码弹出Windows目录浏览器对话框usesVcl.FileCtrl;procedureTForm1.Button1Click(Sender:TObject);varvPath:string;begin......
  • Vue 局部过滤器和全局过滤器
    Vue过滤器总结:定义:对要显示的数据进行特定格式化后再显示(适用于一些简单逻辑的处理)语法:1、注册过滤器:Vue.filter(name,callback)或newVue{filters:{}}2、使用过滤......
  • Servlet_2_过滤器
    使用过滤器,可以对请求数据进行处理后再交给servlet,也可以对servlet的响应数据进行处理后再交给浏览器。  一、基本知识声明周期:与服务器共存亡。使用步骤:......
  • delphi 信息登记
    信息登记查询代码unitUnit_Driver_Info_Register;interfaceusesWindows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms,StrUtils,Dialo......
  • delphi cxGrid做一个可以控制单元格数量上限和下限的功能
    先看效果图效果要求:1.点击申领数量时,自动设置此物料可领上限,与可退的下限2.申领数量为0时,不更新说明:1.使用了cxGrid+FireDAC2.TFDQuery控......
  • 过滤器配置详解
    拦截路径配置1具体资源路径:/index.jsp只有访问index.jsp资源时,过滤器才会被执行2拦截目录:/user/*访问/user下的所有资源时过滤器都会被执行3后缀名拦......
  • Filter过滤器 快速入门
    Filter过滤器举例:饮水机空调 web中的过滤器:当访问服务器的资源时过滤器可以将请求拦截下来完成一些特殊功能过滤器的作用一般用来完成通过的操作如......
  • 过滤器细节 执行流程 生命周期
    过滤器细节web.xml配置<filter><filter-name>demo1</filter-name><filter-class>cn.nan.web.filter.FilterDemo1</filter-class></filter><filter-mapping><......
  • vue再读37-过滤器的使用日期格式
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>Document</t......