Crystal-Reports-Bericht: Fehlende Parameter-Werte
Ich bin neu in Crystal-Reports-Bericht, Anwendung in ASP.net 3.5 und MySQL 5.1, weiter entwickeln Bericht zwischen Daten wie ab-Datum und bis-Datum, der ersten Seite des Berichts angezeigt wird gut, aber wenn ich versuchte, Sie zum navigieren auf einer anderen Seite bekam ich eine Fehlermeldung wie Fehlenden Parameterwerte gleichen Fehler, ich habe im Druck-und Export-Aktion
Vielen Dank im Voraus
öffentliche partielle Klasse BookingStatement : System.Web.UI.Seite
{
//DAL is my Data Access Layer Class
//Buch ist ReportClass
DAL obj = new DAL();
Book bkStmt = new Book();
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
//crvBooking is Crystal Report Viewer
//reportFill method is to fill Report
reportFill();
crvBooking.EnableViewState = true;
crvBooking.EnableParameterPrompt = false;
}
/* Also try reportFill() out side !IsPostBack but didn't work */
//Check if the parmeters have been shown.
/* if ((ViewState["ParametersShown"] != null) && (ViewState["ParametersShown"].ToString() == "True"))
{
bkStmt.SetParameterValue(0, "20/04/2010");
bkStmt.SetParameterValue(1, "20/04/2010");
}*/
}
protected void crvBooking_navigate(object sender, CrystalDecisions.Web.NavigateEventArgs e)
{
//reportFill();
}
protected void reportFill()
{
//bkStmt.rpt is Report file
//bookingstatment is View
//bkStmt is ReportClass object of Book
string rptPath = "bkStmt.rpt";
string query = "select * from bookingstatment";
crvBooking.RefreshReport();
crvBooking.Height = 600;
crvBooking.Width = 900;
bkStmt.ResourceName = rptPath;
String dtFrm = bkStmt.ParameterFields[0].CurrentValues.ToString();
obj.SetCommandType(CommandType.Text);
obj.CommText = query;
DataTable dtst = obj.GetDataTable();
crvBooking.ParameterFieldInfo.Clear();
ParameterDiscreteValue discretevalue = new ParameterDiscreteValue();
discretevalue.Value = "20/04/2010"; //Assign parameter
ParameterValues values = new ParameterValues();
values.Add(discretevalue);
bkStmt.SetDataSource(dtst);
ViewState["ParametersShown"] = "True";
crvBooking.EnableViewState = true;
bkStmt.DataDefinition.ParameterFields[0].ApplyCurrentValues(values);
bkStmt.DataDefinition.ParameterFields[1].ApplyCurrentValues(values);
crvBooking.ReportSource = bkStmt;
}
}
InformationsquelleAutor Chintan | 2010-04-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das problem scheint auftreten, weil Crystal Reports nicht beibehalten werden, die die parameter Werte in die ViewState, wenn ein postback erfolgt. Also, wenn die
CrystalReportViewer
versucht zu laden, bis dieReportClass
es alsReportSource
wieder, die Werte der parameter sind nicht mehr da.Einer Lösung, die wir verwendet haben, erfolgreich ist, speichern Sie die
ReportClass
(d.h. der Crystal Reports-Objekt) inSession
nachdem alle parameter-Werte gesetzt wurden, & dann laden Sie diese in dieCrystalReportViewer
bei jedem PostBack in derPage_Init
Veranstaltung. Ein Beispiel:Dann der Page_Init-Ereignis der Seite sieht wie folgt aus:
Wir auf diese Weise wird immer ein report-Objekt für die Zuschauer, die bereits initialisiert wurden mit den entsprechenden Werten.
Etwas zu beachten bei dieser Methode ist, dass Sie potenziell füllen Sie Ihre server-Speicher sehr schnell, vor allem, wenn Sie viele Benutzer eine Vielzahl von verschiedenen berichten. So einige Zimmerreinigung ist in Ordnung. Wir haben dies getan, durch die Implementierung einer Basisklasse für alle unsere ASP.NET Seiten, auf die ein Bericht (und damit auch dieser Bericht be-code). In dieser Basis-Klasse, setzen wir alle möglichen
Session
Variablen, die Berichte zu null. Etwa so:Dann die definition für BaseReport ist wie folgt:
In dieser Weise ist sichergestellt, dass jeder Benutzer immer nur hat ein Bericht in der Erinnerung zu einem bestimmten Zeitpunkt.
Wenn der Speicher ist ein Anliegen, das auch mit diesem Ansatz eine alternative könnte sein, die zum speichern der einzelnen Werte der Variablen in
Session
& dann instanziere einen neuen Bericht inPage_Init
& bevölkern es mit den gespeicherten Werten, bevor die Zuordnung zuCrystalReportViewer.ReportSource
. Aber in unserem Fall, mit 40 Benutzer ziehen 50+ verschiedene Berichte auf einer täglichen basis, diese Implementierung der Speicherung derReportClass
object & die begleitende Haushalt, haben wir nicht die keine Speicher-Probleme, da die Anwendung live gegangen vor 3 Jahren. Ich würde noch vorschlagen, tun entsprechenden load testing & überwachung, bevor Sie diese Lösung, um die Produktion, wie die Ergebnisse variieren je nach der spezifischen Implementierung.InformationsquelleAutor Carl Heinrich Hancke
Wenn ich das schreiben von SQL für einen Crystal-Reports-Bericht, den code für die Parameter in SQL lautet wie folgt:
Natürlich haben Sie immer die Möglichkeit, die Programmierung der Parameter direkt in Crystal. Dieser Ansatz ist nicht so effizient, aber manchmal einfacher.
InformationsquelleAutor sgtjim