解决方案 »
- 请问delphi用UniDac操作mysql如何返回关键字在指定表的指定字段的第一个出现的位置
- inno打包程序,替换文件失败时,怎么自动忽略,不弹出提示框?
- 用RzStringGrid组件的时候,如何得到它的列宽啊
- 前些天去了几家公司笔试,有些题不会~
- 我用easychm帮助文件制作工具生成一个chm帮助文件,可在标题上有些软件开发者的信息,有什么办法可以让chm文件上标题改掉吗?
- 用QReport控件制作报表,在报表预览时,能不能对其某些字段字体进行动态修改
- 哪位有delphi盒子的类QQ界面组件?
- 用query控件连接远程服务器时为什么提示'table is readonly'
- 打印初级问题!!!!!
- 帮我作毕业设计 c/s模式 delphi 有偿
- 推荐贴:XE哪个版本更稳定些。推荐哈,谢谢。
- cxgrid怎么得到每个分组的平均值?
你需求的[包含], 匹配情况只有: %国%
应该在过滤窗体中找到确定这个按钮,然后更改生成出来的过滤字串。
于是,找到 cxFilterControlDialog.pas ,查看 OK 按钮的 OnClick 事件
发现里面只有一条语句:
ApplyFilter;
于是,再跟踪 ApplyFilter 函数,它的声明如下:
procedure ApplyFilter; virtual;procedure TfmFilterControlDialog.ApplyFilter;
begin
SetControlsEnabled(False);
DoBeforeApply;
try
FilterControl.ApplyFilter;
finally
DoAfterApply;
SetControlsEnabled(True);
end;
end;继续跟踪 DoBeforeApply ,发现其也是一个虚方法:procedure TfmFilterControlDialog.DoBeforeApply;
begin
if Assigned(FOnBeforeApply) then
FOnBeforeApply(Self);
end;又发现 FOnBeforeApply 的声明为:
FOnBeforeApply: TNotifyEvent;
到这,就不懂得如何往下跟踪了...
filterControl 这个对象在哪? 在这个单元好像没找到这个对象
不知道是引引哪个单元的东东
\DevExpress VCL\ExpressDataController\Sources\cxFilter.pas2 TcxFilterCriteria.AddItem过程做如下修改:(自动给like, not like运算的查询条件加%)function TcxFilterCriteria.AddItem(AParent: TcxFilterCriteriaItemList; AItemLink: TObject;
AOperatorKind: TcxFilterOperatorKind; const AValue: Variant;
const ADisplayValue: string): TcxFilterCriteriaItem;
begin
if AParent = nil then
AParent := Root; if AOperatorKind in [foLike, foNotLike] then
Result := AParent.AddItem(AItemLink, AOperatorKind, '%' + AValue + '%', ADisplayValue)
else
Result := AParent.AddItem(AItemLink, AOperatorKind, AValue, ADisplayValue);
end;
之前的修改全部取消.一下改动完成后, 所有使用该文件做过滤的, like, not like 都会受影响
-------------------------------------------------------
把这个文件复制到你的程序目录
\DevExpress VCL\ExpressDataController\Sources\cxLike.pasfunction LikeStr(const AStr, APatternStr: string; APercent, AUnderline: Char): Boolean;
var
vPatternStr : string;
begin
vPatternStr := Format('%%%s%%', [APatternStr]);
Result := Like(PChar(AStr), Length(AStr), PChar(vPatternStr),
Length(vPatternStr), APercent, AUnderline, #0);
end;