有可能在SMDBGrid设置过滤选项不区分大小写?

问题描述 投票:0回答:2

我已经SMDBGrid设置为true显示过滤器栏选项组成部分,但过滤器只是区分大小写的模式下工作

1.Try用小写

2.Try与上壳

我试图在这样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:我使用德尔福2009年

delphi-2009
2个回答
0
投票

您可以使用OnAccentStringConvert事件中列前比较变换过滤器的价值:

begin
  Result := UpperCase(S)
end;

0
投票

貌似我这个问题也应付。试图找到德尔福XE 10.3社区版的任何解决方案,并写信给创作SMDBGrid的,他发现解决方法。

请使用SQL ADOQuery如下。

SELECT UPPER(field) FROM your_table

然后使用事件OnAccentStringConvert和大写弦乐如下:

function TYourFormName.DBGrridNameAccentStringConvert(Sender: TObject; const S: string): string;
begin
  Result := UpperCase(S)
end;

这工作很丑陋,但至少工作。或者,你可以自行为每个表只创建过滤器。

© www.soinside.com 2019 - 2024. All rights reserved.