本方案不需要修改控件源码,是完美解决cxgrid或TcxDBExtLookupComboBox支持多列模糊匹配快速输入的最佳方案!!

转自https://blog.csdn.net/qq56430204/article/details/52199007

小哥摸索多日,终于搞定cxgrid和TcxDBExtLookupComboBox可以支持多列模糊查找输入了!

纵观网上的方案,不是修改控件源码,就是自己封装弹窗,代码太长太复杂,后遗症也多多,而自己封装用户体验也是难以尽善尽美,因为UI风格皮肤都不一致啊,嗷嗷~~
本人吐血奉献不需要修改控件源码的方案,堪称史上最完美解决方案!!走过路过不要错过,欢迎收藏!
 

修改方案:cxGrid列的Properties设置为ExtLookupComboBox对象,或者用TcxDBExtLookupComboBox控件。

TExtLookupComboBox和TcxDBExtLookupComboBox控件默认只支持单列查找,而且是始于包含查找,不是我们想要的多列完全模糊匹配查找,所以还需要自行修改。改写方法如下:

假设cxgrid中有一个服务商ID数据列:cxGridDBTableView1VENDOR_ID: TcxGridDBColumn,绑定服务商ID字段。

第1步: OnGetPropertiesForEdit Event.

procedure TForm1.cxGridDBTableView1VENDOR_IDGetPropertiesForEdit

(Sender: TcxCustomGridTableItem; ARecord: TcxCustomGridRecord;

var AProperties: TcxCustomEditProperties);

begin

with (AProperties as TcxExtLookupComboBoxProperties) do

begin

//也可以在设计期的属性窗口中设置,则可以省去此第1步代码。

CaseInsensitive := True;

CaseSensitiveSearch := False;

IncrementalSearch := False;

IncrementalFiltering := False;
    DropDownListStyle := lsEditList;

View.DataController.Filter.Options := [fcoCaseInsensitive]; //过滤忽略大小写差异.

View.DataController.Filter.AutoDataSetFilter := False; //避免编辑时干扰到其它行.

View.FilterBox.CustomizeDialog := False;

end;

end;
 第2步:Properties.OnChange  Event.

procedure TForm1.cxGridDBTableView1VENDOR_IDPropertiesChange(Sender: TObject);

var

iCol: Integer;

begin
  with (Sender as TcxExtLookupComboBox) do

begin

Properties.View.DataController.Filter.Clear;

Properties.View.DataController.Filter.Root.Clear;

// View中所有可视列都用于模糊检索.

for iCol := 0 to Properties.View.ItemCount - 1 do

begin

if (Properties.View.Items[iCol] as TcxGridColumn).VisibleForCustomization

then

begin

if Properties.View.DataController.Filter.Root.Count > 0 then

Properties.View.DataController.Filter.Root.BoolOperatorKind := fboOR;

Properties.View.DataController.Filter.Root.AddItem
         (Properties.View.Items[iCol], foLike, '%' + EditText + '%',  '%' +EditText + '%');

end;

end;

Properties.View.DataController.Filter.Active := True;

if Properties.View.DataController.DataRowCount = 1 then

Properties.View.DataController.SetFocus;

end;

end;
 第3步:Properties.OnCloseUp  Event.

Properties.OnCloseUp事件代码:
procedure TForm1.cxGridDBTableView1VENDOR_IDPropertiesCloseUp(Sender: TObject);
begin
  (Sender as TcxExtLookupComboBox).Properties.View.DataController.Filter.Clear;

end;

如果不要cxGrid,而用TcxDBExtLookupComboBox控件,方法与上述雷同!

DevExpress控件cxGrid实现多列模糊匹配输入的完美解决方案的更多相关文章

  1. DevExpress控件TExtLookupComboBox实现多列模糊匹配输入的方法

    本方案不需要修改控件源码,是完美解决支持多列模糊匹配快速输入的最佳方案!!   1.把列的Properties属性设置为ExtLookupComboBox. Properties.Incrementa ...

  2. Android控件——AutoCompleteTextView与MultiAutoCompleteTextView(实现自动匹配输入的内容)

    ------------------------------------AutoCompleteTextView----------------------

  3. DevExpress控件使用经验总结- GridView列表行号显示操作

    DevExpress是一个比较有名的界面控件套件,提供了一系列的界面控件套件的DotNet界面控件.本文主要介绍我在使用DevExpress控件过程中,遇到或者发现的一些问题解决方案,或者也可以所示一 ...

  4. DevExpress控件的GridControl控件小结

    DevExpress控件的GridControl控件小结 (由于开始使用DevExpress控件了,所以要点滴的记录一下) 1.DevExpress控件组中的GridControl控件不能使横向滚动条 ...

  5. 在Winform开发框架中,利用DevExpress控件实现数据的快速录入和选择

    在实际的项目开发过程中,有好的控件或者功能模块,我都是想办法尽可能集成到我的WInform开发框架中,这样后面开发项目起来,就可以节省很多研究时间,并能重复使用,非常高效方便.在我很早之前的一篇博客& ...

  6. DevExpress控件开发常用要点(项目总结版)

    使用DevExpress控件来做项目开发已经有很长一段时间了,在摸索开发到客户苛刻要求的过程中,其中碰到过很多问题需要解决的,随着一个个问题的解决,也留下很多对DevExpress控件的使用经验及教训 ...

  7. DevExpress控件-- Gridcontrol合并表头

    写在前面的话: 在园子里逛了有一段时间了,一直想写点东西,但苦于自己的水平有限,生怕写出来的东西浪费了读者的时间.楼主有幸参加了公司DevExpress控件的培训,独乐乐不如众乐乐,特附上Demo以飨 ...

  8. DevExpress控件-GridControl根据条件改变单元格/行颜色--转载

    DevExpress控件-数据控件GridControl,有时我们需要根据特定条件改变符合条件的行或者单元格颜色达到突出显示目的,现在动起鼠标跟我一起操作吧,对的,要达到这个目的您甚至都不用动键盘. ...

  9. DevExpress控件使用之RichEditControl的使用

    原文:DevExpress控件使用之RichEditControl的使用 做Winform的,我们一般都知道,传统.NET界面有一个RichTextBox控件,这个是一个富文本控件,可以存储图片文字等 ...

随机推荐

  1. Composer 中文镜像 Lavavel-china 公益项目

    『Composer 中国全量镜像』是由 Laravel China 社区联合 又拍云 与 优帆远扬 共同合作推出的公益项目,旨在为广大 PHP 用户提供稳定和高速的 Composer 国内镜像服务. ...

  2. python 字典遍历

    dic1={"name":"kxb","age":28}for k,v in dic1.items(): print(k+",,, ...

  3. Python之异常处理和socket套接字连接7

    一.异常处理 1)异常处理的使用意义 什么是异常处理 异常是程序发生错误的信号,即程序一旦出错就会立刻产生一个异常,如果该异常没有被处理 那么异常就抛出来,程序的运行也随之终止 异常分为三部分: 异常 ...

  4. Java语法基础课 动手动脑

    1.枚举类型 它的每个具体值都引用一个特定的对象.相同的值则引用同一个对象. 枚举类型不是java原有数据类型 2.为什么double类型的数值进行运算得不到“数学上精确”的结果? 我们给出的数值,在 ...

  5. 前端之javascript的节点操作和Event

    一 节点的增删改查 创建节点:createElement(标签名):创建一个指定名称的节点. 追加节点: 追加一个子节点:somenode.appendChild(标签名) 指定某个位置前面添加一个节 ...

  6. 2019.01.09 bzoj3697: 采药人的路径(点分治)

    传送门 点分治好题. 题意:给出一棵树,边分两种,求满足由两条两种边数相等的路径拼成的路径数. 思路: 考虑将边的种类转化成边权−1-1−1和111,这样就只用考虑由两条权值为000的路径拼成的路径数 ...

  7. Java设计模式——行为型模式

    行为型模式,共11种:策略模式.模板方法模式.观察者模式.迭代子模式.责任链模式.命令模式.备忘录模式.状态模式.访问者模式.中介者模式.解释器模式. 11种模式的关系: 第一类:通过父类与子类的关系 ...

  8. C[a,b]向量空间中的函数的线性相关性

  9. SVN previous operation has not finished

    svn提交遇到恶心的问题,可能是因为上次cleanup中断后,进入死循环了. 错误如下: 解决方法:清空svn的队列 1.下载sqlite3.exe 2.找到你项目的.svn文件,查看是否存在wc.d ...

  10. mysql delete from table 失败

    SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'; TRUNCATE TABLE ...