cxGrid的FilterRow默认自动匹配左边%而不是右边%

参考外国论坛的一篇帖子“TcxGrid i like '%value%'”

帖子最终解决原文:

W dniu czwartek, 19 kwietnia 2012 15:51:58 UTC+2 użytkownik arturs napisał: 
- 显示引用文字 -
Ale jest rozwiązanie na stronie DevExpress 
ja mam klasę z takimi dodatkami do cxGrida a w niej 

class procedure TcxMyUtils. cxChangeCustomTableFilter( view: TcxGridTableView); 
var 
  I: Integer; 
  S: string; 
begin 
  with view, ViewData do 
  begin 
    if FilterRow.Focused then 
    begin 
      for I := 0 to ColumnCount - 1 do 
      begin 
        S := VarToStr(FilterRow.Values[I]); 
        if (Length(S)> 0) and (S[1] <> '%') then 
          FilterRow.Values[I] := '%' + S; 
      end; 
    end; 
  end; 
end; 

a wstawia się ją pod zdarzenie view.DataController.Filter. OnChanged 

TcxMyUtils. cxChangeCustomTableFilter( view); 

根据提示做出以下修改:


//==============================================================================
// 修改cxGrid的FilterRow过滤框的默认值为左匹配
//==============================================================================

1、建立一个公共储存过程,如果有其他Unit需要的话必须做全局声明。

procedure SetCustomFilterRow(cxGridDBBandedTableView: TcxGridDBBandedTableView);
var
  I: Integer;
  S: string;
begin
  with cxGridDBBandedTableView, ViewData do
  begin
    if FilterRow.Focused then
    begin
      for I := 0 to ColumnCount - 1 do
      begin
        S := VarToStr(FilterRow.Values[I]);
        if (Length(S)> 0) and (S[1] <> '%') then
          FilterRow.Values[I] := '%' + S;
      end;
    end;
  end;
end;


2、选择cxGrid中的TcxGridDBBandedTableView,找到Events中的DataContoller的Filter的OnChanged,双击后增加调用修改函数的代码

procedure TFormMainOperation.cxgrddbbandtv1DataControllerFilterChanged(
  Sender: TObject);
begin
  SetCustomFilterRow(cxgrddbbandtv1);
end;

说明:cxgrddbbandtv1是本人实际程序中的cxGrid中的cxGridDBBandedTableView的Name

           TFormMainOperation是本人实际程序中Form的Name

           如果只有一个Form使用可以修改公共调用函数,增加“TFormXXXX.”这样更简单


注意:右匹配%是否自动带出取决于:选择cxGrid中的TcxGridDBBandedTableView,找到Properties中的DataContoller的Filter的PercentWildcard(默认%一般不需要修改)和SupportedLike(真正起效果的属性)

TcxGridDBBandedTableView.DataController.Filter.Options :=[fcoCaseInsensitive];//不区分大小写



Using a checkbox at runtime to make FilterRow Visible/Invisible通过checkbox来控制是否显示

procedure TForm1.CheckBox1Click(Sender: TObject);
begin
  cxGrid1DBTableView1.FilterRow.Visible := CheckBox1.Checked;
end;


控制焦点是否在FilterRow上

<View>.ViewData.FilterRow.Focused := True;


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值