You've already forked lazarus-ccr
RxDBGrid - new code for calc footer sum for any dataset
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@2714 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
@ -846,6 +846,11 @@ begin
|
|||||||
Grid.InvalidateCell(I, Row);
|
Grid.InvalidateCell(I, Row);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
type
|
||||||
|
THackDataLink = class(TDataLink);
|
||||||
|
THackDataSet = class(TDataSet);
|
||||||
|
|
||||||
|
|
||||||
type
|
type
|
||||||
|
|
||||||
{ TRxDBGridLookupComboEditor }
|
{ TRxDBGridLookupComboEditor }
|
||||||
@ -3755,11 +3760,22 @@ end;
|
|||||||
|
|
||||||
procedure TRxDBGrid.CalcStatTotals;
|
procedure TRxDBGrid.CalcStatTotals;
|
||||||
var
|
var
|
||||||
P: TBookmark;
|
//P: TBookmark;
|
||||||
DS: TDataSet;
|
//DS: TDataSet;
|
||||||
i: integer;
|
i: integer;
|
||||||
APresent: boolean;
|
APresent: boolean;
|
||||||
SEA, SEB:TDataSetNotifyEvent;
|
//SEA, SEB:TDataSetNotifyEvent;
|
||||||
|
|
||||||
|
DHL:THackDataLink;
|
||||||
|
DHS:THackDataSet;
|
||||||
|
|
||||||
|
SaveState:TDataSetState;
|
||||||
|
SavePos:integer;
|
||||||
|
SaveActiveRecord:integer;
|
||||||
|
|
||||||
|
SaveAfterScroll:TDataSetNotifyEvent;
|
||||||
|
SaveBeforeScroll:TDataSetNotifyEvent;
|
||||||
|
RCol:TRxColumn;
|
||||||
begin
|
begin
|
||||||
if (not (FFooterOptions.Active and DatalinkActive)) or (Columns.Count = 0) or
|
if (not (FFooterOptions.Active and DatalinkActive)) or (Columns.Count = 0) or
|
||||||
(DataSource.DataSet.RecordCount<=0) then
|
(DataSource.DataSet.RecordCount<=0) then
|
||||||
@ -3777,6 +3793,9 @@ begin
|
|||||||
if not APresent then
|
if not APresent then
|
||||||
exit;
|
exit;
|
||||||
|
|
||||||
|
Inc(FInProcessCalc);
|
||||||
|
|
||||||
|
(*
|
||||||
if Assigned(FSortEngine) and (FSortEngine.EnabledFooterRowsCalc) then
|
if Assigned(FSortEngine) and (FSortEngine.EnabledFooterRowsCalc) then
|
||||||
begin
|
begin
|
||||||
for i := 0 to Columns.Count - 1 do
|
for i := 0 to Columns.Count - 1 do
|
||||||
@ -3787,7 +3806,6 @@ begin
|
|||||||
exit;
|
exit;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
Inc(FInProcessCalc);
|
|
||||||
DS := DataSource.DataSet;
|
DS := DataSource.DataSet;
|
||||||
;
|
;
|
||||||
P := Ds.GetBookMark;
|
P := Ds.GetBookMark;
|
||||||
@ -3814,6 +3832,51 @@ begin
|
|||||||
DS.AfterScroll:=SEA;
|
DS.AfterScroll:=SEA;
|
||||||
DS.EnableControls;
|
DS.EnableControls;
|
||||||
end;
|
end;
|
||||||
|
*)
|
||||||
|
|
||||||
|
for i := 0 to Columns.Count - 1 do
|
||||||
|
TRxColumn(Columns[i]).Footer.ResetTestValue;
|
||||||
|
|
||||||
|
DHL:=THackDataLink(Datalink);
|
||||||
|
DHS:=THackDataSet(DataSource.DataSet);
|
||||||
|
SaveState:=DHS.SetTempState(dsBrowse);
|
||||||
|
|
||||||
|
SaveAfterScroll:=DHS.AfterScroll;
|
||||||
|
SaveBeforeScroll:=DHS.BeforeScroll;
|
||||||
|
DHS.AfterScroll:=nil;
|
||||||
|
DHS.BeforeScroll:=nil;
|
||||||
|
|
||||||
|
SaveActiveRecord:=DHL.ActiveRecord;
|
||||||
|
DHL.ActiveRecord:=0;
|
||||||
|
SavePos:=DHS.RecNo;
|
||||||
|
|
||||||
|
|
||||||
|
DHS.First;
|
||||||
|
while not DHS.EOF do
|
||||||
|
begin
|
||||||
|
for i:=0 to Columns.Count-1 do
|
||||||
|
begin
|
||||||
|
RCol:=TRxColumn(Columns[i]);
|
||||||
|
if RCol.Footer.ValueType in [fvtSum, fvtAvg, fvtMax, fvtMin] then
|
||||||
|
RCol.Footer.UpdateTestValueFromVar( DHS.FieldByName(RCol.Footer.FieldName).Value);
|
||||||
|
end;
|
||||||
|
DHS.Next;
|
||||||
|
end;
|
||||||
|
|
||||||
|
DHS.RecNo := DHL.RecordCount + SavePos + 1;
|
||||||
|
|
||||||
|
while not DHS.BOF do
|
||||||
|
begin
|
||||||
|
if SavePos = DHS.RecNo then
|
||||||
|
break;
|
||||||
|
DHS.Prior;
|
||||||
|
end;
|
||||||
|
|
||||||
|
DHL.ActiveRecord:=SaveActiveRecord;
|
||||||
|
DHS.RestoreState(SaveState);
|
||||||
|
|
||||||
|
DHS.AfterScroll := SaveAfterScroll;
|
||||||
|
DHS.BeforeScroll := SaveBeforeScroll;
|
||||||
|
|
||||||
Dec(FInProcessCalc);
|
Dec(FInProcessCalc);
|
||||||
if FInProcessCalc < 0 then
|
if FInProcessCalc < 0 then
|
||||||
@ -4384,8 +4447,8 @@ begin
|
|||||||
exit;
|
exit;
|
||||||
|
|
||||||
inherited LayoutChanged;
|
inherited LayoutChanged;
|
||||||
{ if DatalinkActive and (FInProcessCalc = 0) and (Datalink.DataSet.State = dsBrowse) then
|
if DatalinkActive and (FInProcessCalc = 0) and (Datalink.DataSet.State = dsBrowse) then
|
||||||
CalcStatTotals;}
|
CalcStatTotals;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TRxDBGrid.SetFocus;
|
procedure TRxDBGrid.SetFocus;
|
||||||
|
Reference in New Issue
Block a user