我有SMDBGrid组件,show filter bar选项设置为true,但过滤只是在区分大小写模式下工作
1.尝试使用小写
2.尝试使用大写
我试图像这样在
中插入SMDBgrid.pas中的代码procedure TSMDBGrid.ApplyFilter;
var
TempCol: Integer;
begin
if (eoFilterAutoApply in ExOptions) then
begin
TempCol := LeftCol;
BeginUpdate;
try
if DataLink.Active then
begin
DataLink.DataSet.CheckBrowseMode;
DataLink.DataSet.Filtered := False;
DataLink.DataSet.OnFilterRecord := nil;
DataLink.DataSet.OnFilterRecord := OnFilterRecord;
DataLink.DataSet.FilterOptions := [foCaseInsensitive]; <-- this the inserted code
DataLink.DataSet.Filtered := not FilterIsEmpty();//True;
end;
finally
LeftCol := TempCol;
EndUpdate;
end;
end;
if Assigned(OnFilterChanged) then
OnFilterChanged(Self);
end;
但是没有运气,是否可以过滤掉忽略此案的记录?
PS: 我使用Delphi 2009
答案 0 :(得分:0)
在比较之前,您可以使用OnAccentStringConvert事件转换列中过滤器的值:
begin
Result := UpperCase(S)
end;
答案 1 :(得分:0)
看起来我也可以解决这个问题。试图为Delphi XE 10.3社区版找到任何解决方案,并写信给SMDBGrid的作者,他找到了解决方法。
请按以下方式使用SQL ADOQuery。
SELECT UPPER(field) FROM your_table
然后使用事件OnAccentStringConvert和大写S字符串,如下所示:
function TYourFormName.DBGrridNameAccentStringConvert(Sender: TObject; const S: string): string;
begin
Result := UpperCase(S)
end;
这很难看,但是至少可以。或者,您可以只为每个表自己创建过滤器。