RxDBGrid - fix calc sum in footer row for detail dataset if master dataset scrolled

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@2506 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
alexs75
2012-09-05 18:39:35 +00:00
parent f97c4970d0
commit 2228ea0aa5
3 changed files with 108 additions and 122 deletions

View File

@ -54,12 +54,12 @@
<MinVersion Major="1" Release="18" Build="56" Valid="True"/>
</Item4>
</RequiredPackages>
<Units Count="63">
<Units Count="69">
<Unit0>
<Filename Value="RxDBGridDemo.lpr"/>
<IsPartOfProject Value="True"/>
<UnitName Value="RxDBGridDemo"/>
<EditorIndex Value="5"/>
<EditorIndex Value="4"/>
<WindowIndex Value="0"/>
<TopLine Value="1"/>
<CursorPos X="9" Y="16"/>
@ -73,7 +73,6 @@
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
<UnitName Value="RxDBGridMainUnit"/>
<IsVisibleTab Value="True"/>
<EditorIndex Value="0"/>
<WindowIndex Value="0"/>
<TopLine Value="196"/>
@ -499,10 +498,11 @@
<Unit58>
<Filename Value="/usr/local/share/lazarus/components/rxnew/rxdbgrid.pas"/>
<UnitName Value="rxdbgrid"/>
<IsVisibleTab Value="True"/>
<EditorIndex Value="1"/>
<WindowIndex Value="0"/>
<TopLine Value="556"/>
<CursorPos X="15" Y="572"/>
<TopLine Value="1846"/>
<CursorPos X="1" Y="1847"/>
<UsageCount Value="11"/>
<Bookmarks Count="3">
<Item0 X="3" Y="73" ID="1"/>
@ -514,31 +514,25 @@
<Unit59>
<Filename Value="/usr/local/share/lazarus/lcl/dbgrids.pas"/>
<UnitName Value="DBGrids"/>
<EditorIndex Value="3"/>
<WindowIndex Value="0"/>
<TopLine Value="199"/>
<CursorPos X="3" Y="220"/>
<UsageCount Value="11"/>
<Loaded Value="True"/>
</Unit59>
<Unit60>
<Filename Value="/usr/local/share/lazarus/lcl/grids.pas"/>
<UnitName Value="Grids"/>
<EditorIndex Value="4"/>
<WindowIndex Value="0"/>
<TopLine Value="7494"/>
<CursorPos X="34" Y="7503"/>
<UsageCount Value="11"/>
<Loaded Value="True"/>
</Unit60>
<Unit61>
<Filename Value="../../../../../../install/fpcsrc/rtl/objpas/classes/classesh.inc"/>
<EditorIndex Value="2"/>
<WindowIndex Value="0"/>
<TopLine Value="1554"/>
<CursorPos X="38" Y="1569"/>
<UsageCount Value="10"/>
<Loaded Value="True"/>
</Unit61>
<Unit62>
<Filename Value="/usr/local/share/lazarus/lcl/buttons.pp"/>
@ -548,128 +542,113 @@
<CursorPos X="3" Y="360"/>
<UsageCount Value="10"/>
</Unit62>
<Unit63>
<Filename Value="../../../../../../install/fpcsrc/packages/fcl-db/src/base/db.pas"/>
<UnitName Value="db"/>
<WindowIndex Value="0"/>
<TopLine Value="1588"/>
<CursorPos X="15" Y="1609"/>
<UsageCount Value="10"/>
</Unit63>
<Unit64>
<Filename Value="/usr/local/share/lazarus/components/rxnew/vclutils.pas"/>
<UnitName Value="vclutils"/>
<EditorIndex Value="2"/>
<WindowIndex Value="0"/>
<TopLine Value="187"/>
<CursorPos X="11" Y="220"/>
<UsageCount Value="10"/>
<Loaded Value="True"/>
</Unit64>
<Unit65>
<Filename Value="/usr/local/share/lazarus/lcl/include/canvas.inc"/>
<WindowIndex Value="0"/>
<TopLine Value="1317"/>
<CursorPos X="1" Y="1338"/>
<UsageCount Value="10"/>
</Unit65>
<Unit66>
<Filename Value="/usr/local/share/lazarus/lcl/graphics.pp"/>
<UnitName Value="Graphics"/>
<EditorIndex Value="3"/>
<WindowIndex Value="0"/>
<TopLine Value="93"/>
<CursorPos X="3" Y="99"/>
<UsageCount Value="10"/>
<Loaded Value="True"/>
</Unit66>
<Unit67>
<Filename Value="/usr/local/share/lazarus/lcl/include/lclintf.inc"/>
<WindowIndex Value="0"/>
<TopLine Value="132"/>
<CursorPos X="1" Y="155"/>
<UsageCount Value="10"/>
</Unit67>
<Unit68>
<Filename Value="/usr/local/share/lazarus/lcl/interfaces/gtk2/gtk2lclintf.inc"/>
<WindowIndex Value="0"/>
<TopLine Value="167"/>
<CursorPos X="1" Y="190"/>
<UsageCount Value="10"/>
</Unit68>
</Units>
<JumpHistory Count="30" HistoryIndex="29">
<JumpHistory Count="14" HistoryIndex="13">
<Position1>
<Filename Value="/usr/local/share/lazarus/components/rxnew/rxdbgrid.pas"/>
<Caret Line="329" Column="37" TopLine="307"/>
<Filename Value="/usr/local/share/lazarus/lcl/graphics.pp"/>
<Caret Line="1179" Column="14" TopLine="1128"/>
</Position1>
<Position2>
<Filename Value="/usr/local/share/lazarus/components/rxnew/rxdbgrid.pas"/>
<Caret Line="814" Column="24" TopLine="812"/>
<Filename Value="/usr/local/share/lazarus/components/rxnew/vclutils.pas"/>
<Caret Line="227" Column="1" TopLine="203"/>
</Position2>
<Position3>
<Filename Value="/usr/local/share/lazarus/components/rxnew/rxdbgrid.pas"/>
<Caret Line="568" Column="15" TopLine="547"/>
<Filename Value="/usr/local/share/lazarus/components/rxnew/vclutils.pas"/>
<Caret Line="228" Column="1" TopLine="203"/>
</Position3>
<Position4>
<Filename Value="/usr/local/share/lazarus/components/rxnew/rxdbgrid.pas"/>
<Caret Line="73" Column="3" TopLine="52"/>
<Filename Value="/usr/local/share/lazarus/components/rxnew/vclutils.pas"/>
<Caret Line="316" Column="1" TopLine="295"/>
</Position4>
<Position5>
<Filename Value="/usr/local/share/lazarus/components/rxnew/rxdbgrid.pas"/>
<Caret Line="332" Column="67" TopLine="303"/>
<Caret Line="1867" Column="19" TopLine="1842"/>
</Position5>
<Position6>
<Filename Value="rxdbgridmainunit.pas"/>
<Caret Line="24" Column="32" TopLine="1"/>
<Filename Value="/usr/local/share/lazarus/lcl/graphics.pp"/>
<Caret Line="1179" Column="14" TopLine="1158"/>
</Position6>
<Position7>
<Filename Value="rxdbgridmainunit.pas"/>
<Caret Line="187" Column="34" TopLine="185"/>
<Filename Value="/usr/local/share/lazarus/components/rxnew/rxdbgrid.pas"/>
<Caret Line="1869" Column="33" TopLine="1842"/>
</Position7>
<Position8>
<Filename Value="/usr/local/share/lazarus/components/rxnew/rxdbgrid.pas"/>
<Caret Line="326" Column="35" TopLine="303"/>
<Caret Line="1867" Column="19" TopLine="1846"/>
</Position8>
<Position9>
<Filename Value="/usr/local/share/lazarus/components/rxnew/rxdbgrid.pas"/>
<Caret Line="327" Column="41" TopLine="297"/>
<Filename Value="/usr/local/share/lazarus/lcl/graphics.pp"/>
<Caret Line="1179" Column="14" TopLine="1158"/>
</Position9>
<Position10>
<Filename Value="/usr/local/share/lazarus/components/rxnew/rxdbgrid.pas"/>
<Caret Line="332" Column="37" TopLine="310"/>
<Caret Line="1867" Column="19" TopLine="1846"/>
</Position10>
<Position11>
<Filename Value="/usr/local/share/lazarus/components/rxnew/rxdbgrid.pas"/>
<Caret Line="333" Column="39" TopLine="319"/>
<Caret Line="1870" Column="19" TopLine="1846"/>
</Position11>
<Position12>
<Filename Value="rxdbgridmainunit.pas"/>
<Caret Line="200" Column="26" TopLine="189"/>
<Filename Value="/usr/local/share/lazarus/lcl/graphics.pp"/>
<Caret Line="1179" Column="14" TopLine="1158"/>
</Position12>
<Position13>
<Filename Value="/usr/local/share/lazarus/components/rxnew/rxdbgrid.pas"/>
<Caret Line="332" Column="17" TopLine="307"/>
<Caret Line="1870" Column="15" TopLine="1846"/>
</Position13>
<Position14>
<Filename Value="/usr/local/share/lazarus/components/rxnew/rxdbgrid.pas"/>
<Caret Line="138" Column="11" TopLine="113"/>
<Filename Value="/usr/local/share/lazarus/components/rxnew/vclutils.pas"/>
<Caret Line="298" Column="3" TopLine="280"/>
</Position14>
<Position15>
<Filename Value="/usr/local/share/lazarus/components/rxnew/rxdbgrid.pas"/>
<Caret Line="73" Column="3" TopLine="57"/>
</Position15>
<Position16>
<Filename Value="/usr/local/share/lazarus/components/rxnew/rxdbgrid.pas"/>
<Caret Line="839" Column="6" TopLine="836"/>
</Position16>
<Position17>
<Filename Value="/usr/local/share/lazarus/components/rxnew/rxdbgrid.pas"/>
<Caret Line="1" Column="1" TopLine="1"/>
</Position17>
<Position18>
<Filename Value="/usr/local/share/lazarus/components/rxnew/rxdbgrid.pas"/>
<Caret Line="568" Column="20" TopLine="542"/>
</Position18>
<Position19>
<Filename Value="/usr/local/share/lazarus/components/rxnew/rxdbgrid.pas"/>
<Caret Line="3498" Column="26" TopLine="3472"/>
</Position19>
<Position20>
<Filename Value="/usr/local/share/lazarus/components/rxnew/rxdbgrid.pas"/>
<Caret Line="3500" Column="18" TopLine="3474"/>
</Position20>
<Position21>
<Filename Value="/usr/local/share/lazarus/components/rxnew/rxdbgrid.pas"/>
<Caret Line="1" Column="1" TopLine="1"/>
</Position21>
<Position22>
<Filename Value="/usr/local/share/lazarus/components/rxnew/rxdbgrid.pas"/>
<Caret Line="2315" Column="50" TopLine="2292"/>
</Position22>
<Position23>
<Filename Value="/usr/local/share/lazarus/components/rxnew/rxdbgrid.pas"/>
<Caret Line="2318" Column="50" TopLine="2292"/>
</Position23>
<Position24>
<Filename Value="/usr/local/share/lazarus/components/rxnew/rxdbgrid.pas"/>
<Caret Line="336" Column="15" TopLine="305"/>
</Position24>
<Position25>
<Filename Value="/usr/local/share/lazarus/components/rxnew/rxdbgrid.pas"/>
<Caret Line="317" Column="15" TopLine="301"/>
</Position25>
<Position26>
<Filename Value="/usr/local/share/lazarus/components/rxnew/rxdbgrid.pas"/>
<Caret Line="328" Column="13" TopLine="302"/>
</Position26>
<Position27>
<Filename Value="rxdbgridmainunit.pas"/>
<Caret Line="144" Column="3" TopLine="141"/>
</Position27>
<Position28>
<Filename Value="rxdbgridmainunit.pas"/>
<Caret Line="83" Column="36" TopLine="65"/>
</Position28>
<Position29>
<Filename Value="rxdbgridmainunit.pas"/>
<Caret Line="199" Column="24" TopLine="196"/>
</Position29>
<Position30>
<Filename Value="rxdbgridmainunit.pas"/>
<Caret Line="198" Column="27" TopLine="182"/>
</Position30>
</JumpHistory>
</ProjectOptions>
<CompilerOptions>

View File

@ -42,11 +42,11 @@ object RxDBGridMainForm: TRxDBGridMainForm
end
item
Title.Alignment = taCenter
Title.Caption = 'Code'
Title.Orientation = toHorizontal
Title.Caption = 'Code - ID'
Title.Orientation = toVertical90
Title.Hint = 'Code - ID'
Title.ShowHint = True
Width = 136
Width = 100
FieldName = 'ID'
Footer.Alignment = taRightJustify
Footer.DisplayFormat = 'Count: %d'
@ -122,6 +122,7 @@ object RxDBGridMainForm: TRxDBGridMainForm
0000EEEEEEEEEEE00000EEEEEEEEEEE00000
}
Hint = 'Clear value'
NumGlyphs = 0
OnClick = TRxColumnEditButtons2Click
end>
end
@ -185,6 +186,7 @@ object RxDBGridMainForm: TRxDBGridMainForm
BB06666600000000006666666000066666666666666666666666
}
Hint = 'Первая кнопка'
NumGlyphs = 0
Width = 16
OnClick = TRxColumnEditButtons0Click
end
@ -207,6 +209,7 @@ object RxDBGridMainForm: TRxDBGridMainForm
00000000000000000000
}
Hint = 'Вторая кнопка'
NumGlyphs = 0
OnClick = TRxColumnEditButtons1Click
end>
end>
@ -279,10 +282,10 @@ object RxDBGridMainForm: TRxDBGridMainForm
AnchorSideLeft.Control = Button2
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = Panel1
Left = 270
Left = 245
Height = 15
Top = 7
Width = 35
Width = 34
BorderSpacing.Around = 6
Caption = 'Mode'
ParentColor = False
@ -293,7 +296,7 @@ object RxDBGridMainForm: TRxDBGridMainForm
Left = 7
Height = 27
Top = 7
Width = 86
Width = 77
Action = actCalcTotal
AutoSize = True
BorderSpacing.Around = 6
@ -303,10 +306,10 @@ object RxDBGridMainForm: TRxDBGridMainForm
AnchorSideLeft.Control = Button1
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = Panel1
Left = 99
Left = 90
Height = 27
Top = 7
Width = 165
Width = 149
Action = actOptimizeColumnsWidthAll
AutoSize = True
BorderSpacing.Around = 6
@ -317,11 +320,11 @@ object RxDBGridMainForm: TRxDBGridMainForm
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = CheckBox2
AnchorSideTop.Side = asrBottom
Left = 499
Left = 474
Height = 22
Hint = 'Use filter line'
Top = 35
Width = 83
Width = 78
BorderSpacing.Left = 6
Caption = 'Use filter'
OnChange = CheckBox1Change
@ -331,7 +334,7 @@ object RxDBGridMainForm: TRxDBGridMainForm
AnchorSideLeft.Control = Label1
AnchorSideTop.Control = Label1
AnchorSideTop.Side = asrBottom
Left = 276
Left = 251
Height = 25
Top = 28
Width = 217
@ -351,11 +354,11 @@ object RxDBGridMainForm: TRxDBGridMainForm
AnchorSideLeft.Control = ComboBox1
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = Panel1
Left = 499
Left = 474
Height = 22
Hint = 'Auto fill column width'
Top = 7
Width = 133
Width = 122
BorderSpacing.Around = 6
Caption = 'Auto fill columns'
OnChange = CheckBox2Change
@ -365,10 +368,10 @@ object RxDBGridMainForm: TRxDBGridMainForm
AnchorSideLeft.Control = CheckBox2
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = Panel1
Left = 638
Left = 602
Height = 22
Top = 7
Width = 120
Width = 113
BorderSpacing.Around = 6
Caption = 'Show indicator'
Checked = True
@ -381,10 +384,10 @@ object RxDBGridMainForm: TRxDBGridMainForm
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = CheckBox3
AnchorSideTop.Side = asrBottom
Left = 638
Left = 602
Height = 22
Top = 35
Width = 115
Width = 111
BorderSpacing.Around = 6
Caption = 'Show headers'
Checked = True

View File

@ -105,6 +105,8 @@ type
rxgcHideQuickFilter
);
TRxDSState = (rxdsInactive, rxdsActive);
{ TRxDBGridKeyStroke }
TRxDBGridKeyStroke = class(TCollectionItem)
@ -414,6 +416,7 @@ type
{ TRxDBGrid }
TRxDBGrid = class(TCustomDBGrid)
private
FrxDSState:TRxDSState;
FFooterOptions: TRxDBGridFooterOptions;
FSortingNow:Boolean;
FInProcessCalc: integer;
@ -515,6 +518,8 @@ type
procedure CleanDSEvent;
protected
function DatalinkActive: boolean;
procedure LinkActive(Value: Boolean); override;
procedure DefaultDrawCellA(aCol, aRow: integer; aRect: TRect;
aState: TGridDrawState);
procedure DefaultDrawTitle(aCol, aRow: integer; aRect: TRect;
@ -525,7 +530,6 @@ type
aState: TGridDrawState);
procedure DrawCell(aCol, aRow: integer; aRect: TRect; aState: TGridDrawState);
override;
procedure LinkActive(Value: boolean); override;
procedure SetDBHandlers(Value: boolean);virtual;
procedure DrawFooterRows; virtual;
@ -3025,8 +3029,7 @@ begin
UpdateFooterRowOnUpdateActive;
end
else
if Assigned(FFooterOptions) and FFooterOptions.Active and (FFooterOptions.RowCount > 0) {and
DatalinkActive and (DataSource.DataSet.State = dsBrowse) }then
if FFooterOptions.Active and (FFooterOptions.RowCount > 0) then
UpdateFooterRowOnUpdateActive;
// CalcStatTotals;
end;
@ -3594,11 +3597,11 @@ end;
//!!!
constructor TRxDBGrid.Create(AOwner: TComponent);
begin
FFooterOptions:=TRxDBGridFooterOptions.Create(Self);
inherited Create(AOwner);
{$IFDEF RXDBGRID_OPTIONS_WO_CANCEL_ON_EXIT}
Options := Options - [dgCancelOnExit];
{$ENDIF}
FFooterOptions:=TRxDBGridFooterOptions.Create(Self);
FKeyStrokes := TRxDBGridKeyStrokes.Create(Self);
FKeyStrokes.ResetDefaults;
@ -3677,7 +3680,8 @@ end;
procedure TRxDBGrid.LayoutChanged;
begin
inherited LayoutChanged;
// CalcTitle;
if DatalinkActive and (FInProcessCalc = 0) and (Datalink.DataSet.State = dsBrowse) then
CalcStatTotals;
end;
procedure TRxDBGrid.ShowFindDialog;
@ -4023,7 +4027,7 @@ begin
if Assigned(F) then
begin
if F.DataType in [ftSmallint, ftInteger, ftWord, ftFloat, ftCurrency,
ftDate, ftTime, ftDateTime, ftTimeStamp, ftLargeint] then
ftDate, ftTime, ftDateTime, ftTimeStamp, ftLargeint, ftBCD] then
begin
if F.DataType in [ftDate, ftTime, ftDateTime, ftTimeStamp] then
begin