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

原文已删除.

2024-03-22修正:

效果图:

需求: 在cxgrid执行过虑操作前,重新定义关键词,实现模糊匹配.比如用户输入"ABC",则改为"%ABC".实际上,对于文本匹配,cxgrid默认会在关键词后面多加一个"%"号,所以我们只需要在前面加一个"%"就可以了

核心代码:

procedure TForm1.cxGrid1DBTableView1DataControllerFilterBeforeChange(Sender: TcxDBDataFilterCriteria; ADataSet: TDataSet; const AFilterText: string);
var
  ROld, RNew, NewStr: string;
begin
  ROld := ' LIKE ''';
  RNew := ' LIKE ''' + '*';  //数据库为ACCESS.已设置属性DataController.filter.percentwildcard:=* ,把%改成*是为了用户操作简便,按%需要同时按shift键,而*号在小键盘上可以直接输入,视需求而定吧
  //处理过滤条件,替换字符串
  NewStr := StringReplace(AFilterText, RNew, ROld, [rfReplaceAll, rfIgnoreCase]);
  NewStr := StringReplace(NewStr, ROld, RNew, [rfReplaceAll, rfIgnoreCase]);
  NewStr := StringReplace(NewStr, '*', '%', [rfReplaceAll, rfIgnoreCase]);    //把星号转成%

  FDMemTable1.Filtered := False;
  FDMemTable1.Filter := NewStr;
  self.Caption :=newstr;
  FDMemTable1.Filtered := True;
end;

procedure TForm1.scGPButton3Click(Sender: TObject);  //清空条件
begin
     cxGrid1DBTableView1.DataController.Filter.Clear ;
end;

 

posted @ 2023-02-16 20:36  一曲轻扬  阅读(952)  评论(0)    收藏  举报