So, bin weiter und hab von alleine die CustomConnection gewählt, da sie gerade in meinem Fall doch einige Vorteile bringt, ABER...
Der Report funktioniert leider nur einmal beim Aufruf aus der Anwendung. Beim nächsten Aufruf ist der Report leer.
Wie gesagt, arbeite ich mit Daten aus VirtualStringTrees und zwar in der Form:
Delphi-Quellcode:
procedure TFProjektbericht.RVCERLOESEGetCols(Connection: TRvCustomConnection);
begin
Connection.WriteField('_KEART', dtString,30,'KostenErlösart','');
Connection.WriteField('_PLAN', dtcurrency,10,'Planwert','');
Connection.WriteField('_ISTKUMGES', dtcurrency,10,'IstKumuliert','');
Connection.WriteField('_PROGENDEPROJEKT', dtCurrency,10,'PrognoseEndeProjekt','');
Connection.WriteField('_DIFFPROGIST', dtCurrency,10,'DiffPrognoseIst','');
Connection.WriteField('_DIFFPROGPLAN', dtCurrency,10,'DIFFPrognosePlan','');
end;
procedure TFProjektbericht.RVCERLOESEGetRow(Connection: TRvCustomConnection);
var
myData: PSDErloese;
begin
myData := PSDErloese(VTSERLOESE.GetNodeData(myRepNode)); // Daten aus dem VirtualStringTree-Knoten holen
Connection.WriteStrData(myData.FBezeichnung,'');
Connection.WriteCurrData(format('%.0n', [myData.FPlan]),myData.FPlan);
Connection.WriteCurrData(format('%.0n', [myData.FIstKumGesamt]),myData.FIstKumGesamt);
Connection.WriteCurrData(format('%.0n', [myData.FPrognoseEndeProjekt]),myData.FPrognoseEndeProjekt);
Connection.WriteCurrData(format('%.0n', [myData.FDiffPrognoseIst]),myData.FDiffPrognoseIst);
Connection.WriteCurrData(format('%.0n', [myData.FDiffPlanIst]),myData.FDiffPlanIst);
myRepNode:=VTSERLOESE.GetNext(myRepNode); // einen Knoten weitergehen
end;
procedure TFProjektbericht.RVCERLOESEOpen(Connection: TRvCustomConnection);
begin
Connection.DataRows:=9;
end;
procedure TFProjektbericht.RVCERLOESEFirst(Connection: TRvCustomConnection);
begin
myRepNode:=VTSERLOESE.GetFirst; // Node des ersten Knoten des VirtualStringTrees holen
end;
Aufgerufen wird der Report mit:
Delphi-Quellcode:
procedure TFProjektbericht.TBItem1Click(Sender: TObject);
var
strPATH: String;
begin
strPath:=ExtractFilePath(Application.ExeName)+'Reports\';
RvProject1.ProjectFile:=strPath+'PIM_Projektbericht_001.rav';
RvProject1.SelectReport('Report1',true);
RvSystem1.DefaultDest:=rdPreview;
rvproject1.Execute;
Das Problem könnte evtl. sein, dass die Daten aus einem mir nicht erklärbarem Grund nur einmal geholt werden, denn ich habe in meinem Report eine andere Sektion, in der ich ebenfalls über CustomConnection Werte aus Edit-Feldern übergebe und diese werden immer angezeigt.
EDIT: Wie ich gerade getestet habe, springt der Report beim zweiten Aufruf gar nicht mehr in das OnGetRow-Event. Warum ist das so?
Gruß Igotcha