Hallo Forum,
ich habe mich die letzten Tage intensiv in das Thema CrystalReport sowie die ReportDocument-Klasse eingearbeitet.
Funktioniert soweit alles, bis auf eines. Ich habe Berichte, in welchen bereits Werte in Parametern vorbelegt sind- vermutlich vom letzten Aufruf aus CrystalReports selbst (siehe auch den angehängten Screenshot bzw. die markierte Zeile beim Debuggen nach dem Load-Ereignis).
Das ist eine feine Sache- auch ich würde gerne Parameterwerte fest in die CrystalReports-Datei selbst speichern, damit die Datei beim nächsten Aufruf die Parameterwerte der letzten Verwendung wieder anzeigt.
Jedoch gelingt es mir bisher lediglich, einen Parameter in die aktuelle Instanz des ReportDocuments zu speichern und diesen dann über den CrystalReports-Viewer anzuzeigen.
Speichere ich das ReportDocument (bei mir als Variable
currentCryRepDoc bezeichnet) folgendermaßen:
[highlight=c#]
_currentCryRepDoc.SaveAs(_currentFile);
// Dabei entspricht der String "_currentFile" dem korrekten Verzeichnis samt Dateiangabe
[/highlight]
So speichert er die gesetzten Values trotzdem nicht in die Datei.
Auf die selbe Weise ist es zwar kein Problem, Verbindungsinformationen zur Datenquelle abzuändern oder zu speichern- das funktioniert Problemlos über die Kombination:
[highlight=c#]
foreach (CrystalDecisions.CrystalReports.Engine.Table table in rptDoc.Database.Tables)
{CrystalDecisions.Shared.TableLogOnInfo info = new CrystalDecisions.Shared.TableLogOnInfo();
info.ConnectionInfo.ServerName = boxConnectionServer.Text.Trim();
info.ConnectionInfo.DatabaseName = boxConnectionDatabase.Text.Trim();
info.ConnectionInfo.UserID = boxConnectionUser.Text.Trim();
info.ConnectionInfo.Password = boxConnectionPassword.Text.Trim();
table.ApplyLogOnInfo(info);
// sowie anschließend über
_currentCryRepDoc.SaveAs(_currentFile);
[/highlight]
Jedoch wie gesagt keine ParameterValues. CrystalReports macht jedoch wunderbar vor, das es funktionieren kann- die Values sind zweifellos in der Datei gespeichert, da ich eine .rpt-Datei auf einem anderen PC samt den Values problemlos auslesen konnte.
Hat jemand eine Ahnung, wie ich selbst einen Value dauerhaft abspeichern kann?
Bisher speichere ich die Parameter über 2 Wege im aktuellen ReportDocument:
[highlight=c#]
// currentCryRepDoc = Variable des aktuellen ReportDocument
_currentCryRepDoc.SetParameterValue(_choosenParame ter, boxParameterValue.Text.Trim());
SaveDefaultParameters(_currentCryRepDoc, _choosenParameter, boxParameterValue.Text.Trim());
// Hinter SaveDefaultParameters steckt dann diese Methode:
private void SaveDefaultParameters(ReportDocument rprDoc, string paramName, string discretValue)
{
CrystalDecisions.Shared.ParameterValues currentValues = rprDoc.ParameterFields[paramName].CurrentValues;
currentValues.Clear();
currentValues.AddValue(discretValue);
}
[/highlight]
Wie gesagt, diese Methoden speichern zwar die Parameterwerte in die aktuelle Instanz, jedoch weder die Methode SetParameterValue, noch SaveDefaultParameters speichern die Values dann auch dauerhaft in die Datei, wenn ich dann currentCryRepDoc.SaveAs(_currentFile) ausführe.
Weiß jemand Rat? Hat jemand ähnliche Erfahrungen? Stundenlanges Googleln brachten mich nicht weiter...
Grüße
Stephan
ich habe mich die letzten Tage intensiv in das Thema CrystalReport sowie die ReportDocument-Klasse eingearbeitet.
Funktioniert soweit alles, bis auf eines. Ich habe Berichte, in welchen bereits Werte in Parametern vorbelegt sind- vermutlich vom letzten Aufruf aus CrystalReports selbst (siehe auch den angehängten Screenshot bzw. die markierte Zeile beim Debuggen nach dem Load-Ereignis).
Das ist eine feine Sache- auch ich würde gerne Parameterwerte fest in die CrystalReports-Datei selbst speichern, damit die Datei beim nächsten Aufruf die Parameterwerte der letzten Verwendung wieder anzeigt.
Jedoch gelingt es mir bisher lediglich, einen Parameter in die aktuelle Instanz des ReportDocuments zu speichern und diesen dann über den CrystalReports-Viewer anzuzeigen.
Speichere ich das ReportDocument (bei mir als Variable
currentCryRepDoc bezeichnet) folgendermaßen:
[highlight=c#]
_currentCryRepDoc.SaveAs(_currentFile);
// Dabei entspricht der String "_currentFile" dem korrekten Verzeichnis samt Dateiangabe
[/highlight]
So speichert er die gesetzten Values trotzdem nicht in die Datei.
Auf die selbe Weise ist es zwar kein Problem, Verbindungsinformationen zur Datenquelle abzuändern oder zu speichern- das funktioniert Problemlos über die Kombination:
[highlight=c#]
foreach (CrystalDecisions.CrystalReports.Engine.Table table in rptDoc.Database.Tables)
{CrystalDecisions.Shared.TableLogOnInfo info = new CrystalDecisions.Shared.TableLogOnInfo();
info.ConnectionInfo.ServerName = boxConnectionServer.Text.Trim();
info.ConnectionInfo.DatabaseName = boxConnectionDatabase.Text.Trim();
info.ConnectionInfo.UserID = boxConnectionUser.Text.Trim();
info.ConnectionInfo.Password = boxConnectionPassword.Text.Trim();
table.ApplyLogOnInfo(info);
// sowie anschließend über
_currentCryRepDoc.SaveAs(_currentFile);
[/highlight]
Jedoch wie gesagt keine ParameterValues. CrystalReports macht jedoch wunderbar vor, das es funktionieren kann- die Values sind zweifellos in der Datei gespeichert, da ich eine .rpt-Datei auf einem anderen PC samt den Values problemlos auslesen konnte.
Hat jemand eine Ahnung, wie ich selbst einen Value dauerhaft abspeichern kann?
Bisher speichere ich die Parameter über 2 Wege im aktuellen ReportDocument:
[highlight=c#]
// currentCryRepDoc = Variable des aktuellen ReportDocument
_currentCryRepDoc.SetParameterValue(_choosenParame ter, boxParameterValue.Text.Trim());
SaveDefaultParameters(_currentCryRepDoc, _choosenParameter, boxParameterValue.Text.Trim());
// Hinter SaveDefaultParameters steckt dann diese Methode:
private void SaveDefaultParameters(ReportDocument rprDoc, string paramName, string discretValue)
{
CrystalDecisions.Shared.ParameterValues currentValues = rprDoc.ParameterFields[paramName].CurrentValues;
currentValues.Clear();
currentValues.AddValue(discretValue);
}
[/highlight]
Wie gesagt, diese Methoden speichern zwar die Parameterwerte in die aktuelle Instanz, jedoch weder die Methode SetParameterValue, noch SaveDefaultParameters speichern die Values dann auch dauerhaft in die Datei, wenn ich dann currentCryRepDoc.SaveAs(_currentFile) ausführe.
Weiß jemand Rat? Hat jemand ähnliche Erfahrungen? Stundenlanges Googleln brachten mich nicht weiter...
Grüße
Stephan
Comment