@@ -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;
21812189end ;
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+
21832242procedure TLabeledDbGrid.doIncrementalLocate ;
21842243var
21852244 IntValue: Integer;
21862245 DateValue: TDateTime;
21872246begin
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
23712434procedure TLabeledDbGrid.OnSearchTimer (Sender: TObject);
23722435begin
2373- doIncrementalLocate;
2436+ case FIncrementalSearchType of
2437+ stBeginsWith: doIncrementalLocate;
2438+ stFilterBy : doIncrementalFilter;
2439+ end ;
23742440end ;
23752441
23762442procedure TLabeledDbGrid.SetIncrementalSearchDelay (const Value : integer);
0 commit comments