Skip to content

Commit b15f9a7

Browse files
committed
TLabeledDbGrid: added the ability to apply an incremental filter to the dataset as an alternative to incremental search, through new IncrementalSearchType property
1 parent 1462555 commit b15f9a7

File tree

1 file changed

+67
-1
lines changed

1 file changed

+67
-1
lines changed

Source/Vcl.LabeledDBCtrls.pas

Lines changed: 67 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -297,6 +297,8 @@ TLabeledDbGrid = class;
297297
TCBCheckBoxedColumnEvent = procedure (Column: TColumn; var IsCheckBoxedColumn: Boolean) of object;
298298
TColumnNotifyEvent = procedure (Column: TColumn) of object;
299299

300+
TGridIncrementalSearchType = (stBeginsWith, stFilterBy);
301+
300302
TLabeledDbGrid = class(TDBGrid)
301303
private
302304
FBoundLabel: TControlBoundLabel;
@@ -322,6 +324,7 @@ TLabeledDbGrid = class(TDBGrid)
322324
FWrapAllText: Boolean;
323325
FColMoving: Boolean;
324326
FTitleMouseDown: boolean;
327+
FIncrementalSearchType: TGridIncrementalSearchType;
325328
function TitleOffset: Integer;
326329
procedure OnSearchTimer(Sender : TObject);
327330
procedure SetBoundCaption(const Value: TCaption);
@@ -346,6 +349,7 @@ TLabeledDbGrid = class(TDBGrid)
346349
function isCheckBoxedField(Field: TField): boolean;
347350
function isUnsortableField(Field: TField): boolean;
348351
procedure doIncrementalLocate;
352+
procedure doIncrementalFilter;
349353
procedure SetIncrementalSearchDelay(const Value: integer);
350354
function GetIncrementalSearchDelay: integer;
351355
procedure SetDrawCheckBoxImages(const Value: Boolean);
@@ -416,6 +420,8 @@ TLabeledDbGrid = class(TDBGrid)
416420
function ColumnIndexByFieldName(const AFieldName: string): Integer;
417421
function GetMouseOverField(X, Y: Integer): TField;
418422
function GetDefaultRowHeight: Integer;
423+
procedure ClearFilters;
424+
419425
published
420426
property TitleFont: TFont read GetTitleFont write SetTitleFont stored False;
421427
property IsEmpty: Boolean read GetIsEmpty;
@@ -440,6 +446,7 @@ TLabeledDbGrid = class(TDBGrid)
440446
property RowMargin: Integer read FRowMargin write SetRowMargin default 0;
441447
property WrapAllText: Boolean read FWrapAllText write SetWrapAllText default False;
442448
property ColMoving: Boolean read FColMoving write SetColMoving default True;
449+
property IncrementalSearchType: TGridIncrementalSearchType read FIncrementalSearchType write FIncrementalSearchType default stBeginsWith;
443450
end;
444451

445452
TNavInsMode = (imInsert, imAppend);
@@ -1216,6 +1223,7 @@ constructor TLabeledDbGrid.Create(AOwner: TComponent);
12161223
FDrawCheckBoxImages := True;
12171224
FShowSortOrder := True;
12181225
FIncrementalSearch := False;
1226+
FIncrementalSearchType := stBeginsWith;
12191227
FSearchTimer := TTimer.Create(nil);
12201228
FSearchTimer.Interval := INCREMENTAL_DELAY_DEFAULT;
12211229
FSearchTimer.Enabled := False;
@@ -2180,12 +2188,67 @@ procedure TLabeledDbGrid.doIncrementalSearch(Key: Char);
21802188
FSearchTimer.Enabled := True;
21812189
end;
21822190

2191+
procedure TLabeledDbGrid.doIncrementalFilter;
2192+
var
2193+
IntValue: Integer;
2194+
DateValue: TDateTime;
2195+
begin
2196+
FSearchTimer.Enabled := False;
2197+
2198+
if (DataSource = nil) or (Datasource.DataSet = nil) or (SelectedField = nil) then
2199+
Exit;
2200+
2201+
Datasource.DataSet.Filtered := False;
2202+
2203+
if StrRicercaIncrementale = '' then
2204+
Datasource.DataSet.Filter := ''
2205+
else
2206+
begin
2207+
Screen.Cursor := crHourGlass;
2208+
Try
2209+
if SelectedField.InheritsFrom(TNumericField) then
2210+
begin
2211+
if TryStrToInt(StrRicercaIncrementale, IntValue) then
2212+
Datasource.DataSet.Filter := SelectedField.FieldName + '='+ IntValue.ToString;
2213+
end
2214+
else if SelectedField.InheritsFrom(TDateField) then
2215+
begin
2216+
if TryStrToDateTime(StrRicercaIncrementale, DateValue) then
2217+
Datasource.DataSet.Filter := SelectedField.FieldName + '='+ QuotedStr(DateToStr(DateValue));
2218+
end
2219+
else if SelectedField.InheritsFrom(TDateTimeField) or SelectedField.InheritsFrom(TSQLTimeStampField) then
2220+
begin
2221+
if TryStrToDateTime(StrRicercaIncrementale, DateValue) then
2222+
Datasource.DataSet.Filter := SelectedField.FieldName + '>='+ QuotedStr(DateTimeToStr(DateValue));
2223+
end
2224+
else
2225+
Datasource.DataSet.Filter := SelectedField.FieldName+ ' like ' +QuotedStr('%'+StrRicercaIncrementale+'%');
2226+
2227+
Datasource.DataSet.Filtered := True;
2228+
Finally
2229+
Screen.Cursor := crDefault;
2230+
End;
2231+
end;
2232+
end;
2233+
2234+
procedure TLabeledDbGrid.ClearFilters;
2235+
begin
2236+
ChangeStrSearch('');
2237+
OnSearchTimer(self);
2238+
end;
2239+
2240+
2241+
21832242
procedure TLabeledDbGrid.doIncrementalLocate;
21842243
var
21852244
IntValue: Integer;
21862245
DateValue: TDateTime;
21872246
begin
21882247
FSearchTimer.Enabled := False;
2248+
2249+
if (DataSource = nil) or (Datasource.DataSet = nil) or (SelectedField = nil) then
2250+
Exit;
2251+
21892252
if StrRicercaIncrementale <> '' then
21902253
begin
21912254
Screen.Cursor := crHourGlass;
@@ -2370,7 +2433,10 @@ procedure TLabeledDbGrid.SetCheckBoxedFields(const Value: string);
23702433

23712434
procedure TLabeledDbGrid.OnSearchTimer(Sender: TObject);
23722435
begin
2373-
doIncrementalLocate;
2436+
case FIncrementalSearchType of
2437+
stBeginsWith: doIncrementalLocate;
2438+
stFilterBy : doIncrementalFilter;
2439+
end;
23742440
end;
23752441

23762442
procedure TLabeledDbGrid.SetIncrementalSearchDelay(const Value: integer);

0 commit comments

Comments
 (0)