Ich habe einen Bericht mit Crystal Reports erstellt. Ich verwende Visual Studio 2010. Das Problem tritt auf, wenn ich versuche, zu einer anderen Seite zu wechseln. Wenn ich versuche, zu Seite 2 oder zur letzten Seite zu navigieren, wird die Fehlermeldung Keine gültige Berichtsquelle verfügbar angezeigt. Hat jemand eine Idee, was ich tun muss? Vielen Dank für Ihre Zeit
Antworten
Zu viele Anzeigen?Speichern Sie den Bericht in der Sitzung und geben Sie dann die Berichtsquelle aus der Sitzung auf der Seite post back
protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack)
{
try
{
CrystalReportViewer1.ReportSource = (ReportDocument)Session["Report"];
CrystalReportViewer1.RefreshReport();
CrystalReportViewer1.DataBind();
}
catch (Exception ex)
{
// throw;
}
}
}
protected void CrystalReportViewer1_PreRender(object sender, EventArgs e)
{
}
protected void btnPrint_Click(object sender, EventArgs e)
{
ReportDocument rptDoc = new ReportDocument();
rptDoc.Load(Server.MapPath("Reports\\BalanceReportNew\\BalanceReport.rpt"));
rptDoc.SetDataSource(ReportData());
Session["Report"] = rptDoc;
CrystalReportViewer1.ReportSource = rptDoc;
CrystalReportViewer1.RefreshReport();
CrystalReportViewer1.DataBind();
}
public DataTable ReportData()
{
string ClassName = ddlClass.SelectedValue;
string Division = ddlDivison.SelectedValue;
string Subject = ddlSubjects.SelectedValue;
DataTable ReportData = objRpt.getReportData(ClassName, Division, Subject);
return ReportData;
}
Die folgenden Schritte sollten Ihr Problem lösen:
protected void Page_Load(object sender, EventArgs e)
{
if (Page.IsPostBack)
{
//whatever you do when the page is loaded for the first time
//this could even be bindReport();
}
else
{
bindReport();
}
}
public void bindReport()
{
ReportDocument rptDoc = new ReportDocument();
dsSample ds = new dsSample(); // .xsd file name
DataTable dt = new DataTable();
// Just set the name of data table
dt.TableName = "Crystal Report Example";
dt = getMostDialledNumbers(); //This function populates the DataTable
ds.Tables[0].Merge(dt, true, MissingSchemaAction.Ignore);
// Your .rpt file path will be below
rptDoc.Load(Server.MapPath("mostDialledNumbers.rpt"));
//set dataset to the report viewer.
rptDoc.SetDataSource(ds);
CrystalReportViewer1.ReportSource = rptDoc;
CrystalReportViewer1.RefreshReport();
//in case you have an UpdatePanel in your page, it needs to be updated
UpdatePanel1.Update();
}
Versuchen Sie es mit der Lösung in diesem Thread:
Es ist keine gültige Berichtsquelle verfügbar
Nach dem, was dort steht, sollten Sie in der Lage sein, es durch die Bereitstellung von ConnectionInfo und ReportSource im Code zum Laufen zu bringen.
Einfache Lösung
================
Ich habe dieses Problem gerade mit CrystalReportViewer gelöst Ereignis navigieren
in der Schaltfläche Bericht anzeigen habe ich das Berichtsdokument in einer Sitzung gespeichert
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
' -- the ds is dataset variable containing data to be displayed in the report
rptDoc.SetDataSource(ds)
Session.Add("rptdoc", rptDoc)
CrystalReportViewer1.ReportSource = rptDoc
End Sub
dann setze ich im Ereignis Navigate des CrystalReportViewer die CrystalReportViewer-Datenquelle auf die Session
Protected Sub j(ByVal source As Object, ByVal e As CrystalDecisions.Web.NavigateEventArgs) Handles CrystalReportViewer1.Navigate
rpt.SetDataSource(ds)
CrystalReportViewer1.ReportSource = session("rptdoc")
End Sub
Jedes Mal, wenn Sie zu einer anderen Seite im Bericht navigieren, wird die CrystalReportViewer-Datenquelle auf das in der Sitzung gespeicherte Berichtsdokument gesetzt.
- See previous answers
- Weitere Antworten anzeigen