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

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

小哥摸索多日,终于搞定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控件,方法与上述雷同!

原文地址:https://www.cnblogs.com/westsoft/p/8503890.html

时间: 2024-11-06 20:08:36

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

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

本方案不需要修改控件源码,是完美解决支持多列模糊匹配快速输入的最佳方案!!   1.把列的Properties属性设置为ExtLookupComboBox. Properties.IncrementalFiltering := False;Properties.CaseSensitiveSearch := False; Properties.DropDownListStyle := lsEditList; 当然,接着要完成设置Properties.View,Properties.KeyField

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

------------------------------------AutoCompleteTextView---------------------- 1.使用方法 布局文件 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width=

DevExpress控件使用经验总结

DevExpress是一个比较有名的界面控件套件,提供了一系列的界面控件套件的DotNet界面控件.本文主要介绍我在使用DevExpress控件过程中,遇到或者发现的一些问题解决方案,或者也可以所示一些小的经验总结.总体来讲,使用DevExpress控件,可以获得更高效的界面设计以及更美观的效果.本文主要通过给出相应的例子以及相关界面效果来说明问题,希望大家能够从中获得好的知识和思路. 1. 应用Office2007和Office2010的界面主题 开始使用DevExpress的时候,发现程序界

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

DevExpress是一个比较有名的界面控件套件,提供了一系列的界面控件套件的DotNet界面控件.本文主要介绍我在使用DevExpress控件过程中,遇到或者发现的一些问题解决方案,或者也可以所示一些小的经验总结.总体来讲,使用DevExpress控件,可以获得更高效的界面设计以及更美观的效果.本文主要通过给出相应的例子以及相关界面效果来说明问题,希望大家能够从中获得好的知识和思路. 1. 应用Office2007和Office2010的界面主题 开始使用DevExpress的时候,发现程序界

DevExpress控件使用经验总结【转载】

DevExpress是一个比较有名的界面控件套件,提供了一系列的界面控件套件的DotNet界面控件.本文主要介绍我在使用DevExpress控件过程中,遇到或者发现的一些问题解决方案,或者也可以所示一些小的经验总结.总体来讲,使用DevExpress控件,可以获得更高效的界面设计以及更美观的效果.本文主要通过给出相应的例子以及相关界面效果来说明问题,希望大家能够从中获得好的知识和思路. 1. 应用Office2007和Office2010的界面主题 开始使用DevExpress的时候,发现程序界

DevExpress XtraGrid网格控件示例七:列过滤

Example 1: 下面的代码示例,展示了如何过滤开头字母为F的海运国家.利用ColumnFilterInfo 对象创建所需的过滤器.然后,为其分配GridColumn.FilterInfo属性. C# 1 using DevExpress.XtraGrid.Columns; 2 gridView1.Columns["ShipCountry"].FilterInfo = 3 new ColumnFilterInfo("[ShipCountry] LIKE 'F%'"

DevExpress控件笔记

DateEdit设置手录格式(yyyy-MM-dd) (yyyy-MM-dd HH:mm) /* * 设置DateEdit手动录入格式(yyyy-MM-dd yyyy-MM-dd hh:mm) * DateRegEx = @"((((1[6-9]|[2-9]\d)\d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]\d|3[01]))|(((1[6-9]|[2-9]\d)\d{2})-(0?[13456789]|1[012])-(0?[1-9]|[12]\d|30))|(

DevExpress控件的GridControl控件小结

XtraGrid 的关键类就是:GridControl和GridView.GridControl本身不显示数据,数据都是显示在GridView/CardView /XXXXView中.GridControl是各种View的容器.所以要控制显示,要从GridView这些类入手. 1.DevExpress控件组中的GridControl控件不能使横向滚动条有效.现象:控件中的好多列都挤在一起,列宽都变的很小,根本无法正常浏览控件单元格中的内容. 解决: gridView1.OptionsView.C

DevExpress控件学习总结(转)

DevExpress控件学习总结 1.Navigation & Layout 1.1 Bar Manager 如果想在窗体或用户控件(user control)上添加工具条(bars)或弹出菜单(popup menus),我们需要把一个不可见的控件(component)BarManager(Navigation&Layout)拖放到这个窗体或用户控件上.这个控件维护工具条在窗体上的布局,处理用户的行为(processes an end-user's actions),提供一些定制功能等等.