我已经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年
您可以使用OnAccentStringConvert事件中列前比较变换过滤器的价值:
begin
Result := UpperCase(S)
end;
貌似我这个问题也应付。试图找到德尔福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;
这工作很丑陋,但至少工作。或者,你可以自行为每个表只创建过滤器。