diff --git a/components/rx/trunk/demos/rxdbgrid/RxDBGrid/RxDBGridDemo.lpi b/components/rx/trunk/demos/rxdbgrid/RxDBGrid/RxDBGridDemo.lpi index ef00b5352..f92b8c1f9 100644 --- a/components/rx/trunk/demos/rxdbgrid/RxDBGrid/RxDBGridDemo.lpi +++ b/components/rx/trunk/demos/rxdbgrid/RxDBGrid/RxDBGridDemo.lpi @@ -479,12 +479,12 @@ - - + + - - + + @@ -563,123 +563,123 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -706,15 +706,6 @@ - - - - - - - - - diff --git a/components/rx/trunk/rxdb/rxdbgrid.pas b/components/rx/trunk/rxdb/rxdbgrid.pas index e9dc0d5bb..74d46b6d3 100644 --- a/components/rx/trunk/rxdb/rxdbgrid.pas +++ b/components/rx/trunk/rxdb/rxdbgrid.pas @@ -867,6 +867,7 @@ type procedure OnDataSetScrolled(aDataSet:TDataSet; Distance: Integer); function GetFieldDisplayText(AField:TField; ACollumn:TRxColumn):string; + procedure FillFilterData; protected FRxDbGridLookupComboEditor: TCustomControl; FRxDbGridDateEditor: TWinControl; @@ -3214,6 +3215,7 @@ begin UseXORFeatures := rdgXORColSizing in AValue; if (rdgFilter in AValue) and not (rdgFilter in OldOpt) then begin + FillFilterData; LayoutChanged; end else @@ -4095,6 +4097,49 @@ begin end end; +procedure TRxDBGrid.FillFilterData; +var + i: Integer; + C: TRxColumn; + FBS, FAS: TDataSetNotifyEvent; +begin + for i := 0 to Columns.Count - 1 do + begin + C := TRxColumn(Columns[i]); + C.Filter.ValueList.Clear; + C.Filter.CurrentValues.Clear; + C.Filter.ManulEditValue:=''; + C.Filter.ItemIndex := -1; + C.Filter.ValueList.Add(C.Filter.EmptyValue); + C.Filter.ValueList.Add(C.Filter.AllValue); + end; + + if DatalinkActive then + begin + DataSource.DataSet.DisableControls; + DataSource.DataSet.Filtered := True; + FBS:=DataSource.DataSet.BeforeScroll; + FAS:=DataSource.DataSet.AfterScroll; + DataSource.DataSet.BeforeScroll:=nil; + DataSource.DataSet.AfterScroll:=nil; + DataSource.DataSet.First; + while not DataSource.DataSet.EOF do + begin + for i := 0 to Columns.Count - 1 do + begin + C := TRxColumn(Columns[i]); + if C.Filter.Enabled and (C.Field <> nil) and (C.Filter.ValueList.IndexOf(C.Field.DisplayText) < 0) then + C.Filter.ValueList.Add(C.Field.DisplayText); + end; + DataSource.DataSet.Next; + end; + DataSource.DataSet.First; + DataSource.DataSet.BeforeScroll:=FBS; + DataSource.DataSet.AfterScroll:=FAS; + DataSource.DataSet.EnableControls; + end; +end; + procedure TRxDBGrid.DefaultDrawCellA(aCol, aRow: integer; aRect: TRect; aState: TGridDrawState); begin @@ -4617,7 +4662,10 @@ begin end; CalcStatTotals; if rdgFilter in OptionsRx then - OnFilter(nil); + begin + FillFilterData; + //OnFilter(nil); + end; end else begin @@ -4634,7 +4682,10 @@ begin DataSource.DataSet.OnPostError := F_EventOnPostError; F_EventOnPostError := nil; if rdgFilter in OptionsRx then - OnFilter(nil); + begin + FillFilterData; + //OnFilter(nil); + end; end; F_LastFilter.Clear; end; @@ -6129,7 +6180,7 @@ var begin BeginUpdate; OptionsRx := OptionsRx + [rdgFilter]; - +{ for i := 0 to Columns.Count - 1 do begin C := TRxColumn(Columns[i]); @@ -6165,7 +6216,7 @@ begin DataSource.DataSet.AfterScroll:=FAS; DataSource.DataSet.EnableControls; end; - +} EndUpdate; end;