mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-12 14:29:36 +02:00
LazReport, fix master/detail reports not updating detail ds when master ds changes activerecord
git-svn-id: trunk@16594 -
This commit is contained in:
parent
f74132f80f
commit
ddd16f211e
@ -5888,11 +5888,18 @@ begin
|
||||
end;
|
||||
|
||||
procedure TfrPage.FormPage;
|
||||
type
|
||||
TBookRecord = record
|
||||
Dataset: TfrDataset;
|
||||
Bookmark: Pointer;
|
||||
end;
|
||||
var
|
||||
BndStack: Array[1..MAXBNDS * 3] of TfrBand;
|
||||
MaxLevel, BndStackTop: Integer;
|
||||
i, sfPage : Integer;
|
||||
HasGroups : Boolean;
|
||||
DetailCount : Integer;
|
||||
BooksBkUp : array of TBookRecord;
|
||||
|
||||
procedure AddToStack(b: TfrBand);
|
||||
begin
|
||||
@ -5903,6 +5910,41 @@ var
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure BackupBookmark(b: TfrBand);
|
||||
var
|
||||
n: Integer;
|
||||
begin
|
||||
n := Length(BooksBkUp);
|
||||
SetLength(BooksBkUp, n+1);
|
||||
BooksBkUp[n].Dataset := b.Dataset;
|
||||
BooksBkUp[n].Bookmark := b.Dataset.GetBookmark;
|
||||
if b.Typ in [btDetailData,btSubDetailData] then
|
||||
inc(DetailCount);
|
||||
end;
|
||||
|
||||
procedure RestoreBookmarks;
|
||||
var
|
||||
n: Integer;
|
||||
begin
|
||||
for n:=0 to Length(BooksBkUp)-1 do
|
||||
with BooksBkUp[n] do begin
|
||||
Dataset.GotoBookMark(Bookmark);
|
||||
Dataset.FreeBookMark(Bookmark);
|
||||
if DetailCount=0 then
|
||||
Dataset.EnableControls;
|
||||
end;
|
||||
SetLength(BooksBkUp, 0);
|
||||
end;
|
||||
|
||||
procedure DisableControls;
|
||||
var
|
||||
n: Integer;
|
||||
begin
|
||||
if DetailCount=0 then
|
||||
for n:=0 to Length(BooksBkUp)-1 do
|
||||
BooksBkUp[n].Dataset.DisableControls;
|
||||
end;
|
||||
|
||||
procedure ShowStack;
|
||||
var
|
||||
i: Integer;
|
||||
@ -5944,11 +5986,13 @@ var
|
||||
b := Bands[Bnds[Level, bpData]];
|
||||
while (b <> nil) and (b.Dataset <> nil) do
|
||||
begin
|
||||
BM:=b.DataSet.GetBookMark;
|
||||
b.DataSet.DisableControls;
|
||||
try
|
||||
b.DataSet.First;
|
||||
|
||||
//if Level<>1 then begin
|
||||
// b.Dataset.Refresh;
|
||||
//end;
|
||||
|
||||
if Mode = pmBuildList then
|
||||
AddRecord(b, rtFirst)
|
||||
else
|
||||
@ -6043,9 +6087,6 @@ var
|
||||
Dec(BndStackTop);
|
||||
end;
|
||||
finally
|
||||
b.DataSet.GotoBookMark(BM);
|
||||
b.DataSet.FreeBookMark(BM);
|
||||
b.DataSet.EnableControls;
|
||||
end;
|
||||
b := b.Next;
|
||||
end;
|
||||
@ -6107,16 +6148,23 @@ begin
|
||||
end;
|
||||
|
||||
BndStackTop := 0;
|
||||
SetLength(BooksBkUp, 0);
|
||||
DetailCount := 0;
|
||||
for i := 1 to MAXBNDS do
|
||||
begin
|
||||
if BandExists(Bands[Bnds[i, bpData]]) then
|
||||
begin
|
||||
MaxLevel := i;
|
||||
BackupBookmark(Bands[Bnds[i, bpData]]);
|
||||
end;
|
||||
end;
|
||||
HasGroups := Bands[btGroupHeader].Objects.Count > 0;
|
||||
{$IFDEF DebugLR}
|
||||
DebugLn('%sMaxLevel=%d doing DoLoop(1)',[sspc,MaxLevel]);
|
||||
{$ENDIF}
|
||||
DisableControls;
|
||||
DoLoop(1);
|
||||
RestoreBookmarks; // this also enablecontrols
|
||||
if Mode = pmNormal then
|
||||
begin
|
||||
if not RowsLayout then
|
||||
|
@ -42,6 +42,7 @@ type
|
||||
procedure Exit; override;
|
||||
procedure First; override;
|
||||
procedure Next; override;
|
||||
procedure Refresh; override;
|
||||
procedure Open;
|
||||
procedure Close;
|
||||
function Eof: Boolean; override;
|
||||
@ -197,6 +198,12 @@ begin
|
||||
inherited Next;
|
||||
end;
|
||||
|
||||
procedure TfrDBDataSet.Refresh;
|
||||
begin
|
||||
if GetDataset<>nil then
|
||||
GetDataset.Refresh;
|
||||
end;
|
||||
|
||||
function TfrDBDataSet.Eof: Boolean;
|
||||
begin
|
||||
Result := inherited Eof or GetDataSet.Eof or FEof;
|
||||
|
@ -38,6 +38,7 @@ type
|
||||
procedure Exit; virtual;
|
||||
procedure First; virtual;
|
||||
procedure Next; virtual;
|
||||
procedure Refresh; virtual;
|
||||
|
||||
function GetBookMark : Pointer; virtual;
|
||||
procedure GotoBookMark(BM : Pointer); virtual;
|
||||
@ -94,6 +95,10 @@ begin
|
||||
if Assigned(FOnNext) then FOnNext(Self);
|
||||
end;
|
||||
|
||||
procedure TfrDataset.Refresh;
|
||||
begin
|
||||
end;
|
||||
|
||||
function TfrDataset.GetBookMark: Pointer;
|
||||
begin
|
||||
Result:=nil;
|
||||
|
Loading…
Reference in New Issue
Block a user