5 Stimmen

Es ist keine gültige Berichtsquelle verfügbar - Crystal Reports

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

2voto

Khalid Rafique Punkte 151

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;
    }

2voto

aleafonso Punkte 2214

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();
    }

1voto

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.

1voto

Mohamed Nor Punkte 485

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.

0voto

Nun seine nicht ein großes Problem, das Sie gerade brauchen, um Sitzung Ihrer Datenquelle zu erstellen. Dann übergeben Sie sie beim Laden der Seite. Alle Crystal Report Funktion wird richtig funktionieren.

Wenn Sie weitere Hilfe oder Code benötigen, lassen Sie es mich wissen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X