Нет доступных источников отчетов - Crystal Reports - PullRequest
5 голосов
/ 13 сентября 2011

Я создал отчет с использованием отчетов Crystal. Я использую Visual Studio 2010. Проблема возникает, когда я пытаюсь перейти на другую страницу. Когда я пытаюсь перейти на страницу 2 или последнюю страницу, на экране появляется сообщение «Нет действительного источника отчетов». Кто-нибудь знает, что мне нужно делать? Спасибо за ваше время

Ответы [ 8 ]

2 голосов
/ 15 мая 2012

Следующее должно решить вашу проблему:

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();
    }
2 голосов
/ 02 января 2012

Сохраните отчет в сеансе, а затем укажите источник отчета из сеанса на странице назад

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;
    }
1 голос
/ 22 июля 2016

# Простое решение

Я только что решил эту проблему с помощью CrystalReportViewer Навигация по событию

в кнопке «Просмотреть отчет» я сохранил документ отчета в сеансе

  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  

затем в событии Navigate CrystalReportViewer я установил для источника данных CrystalReportViewer значение 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

Таким образом, каждый раз, когда вы переходите на другую страницу в отчете, источник данных CrystalReportViewer устанавливается на документ отчета, сохраненный в сеансе.

1 голос
/ 13 сентября 2011

Попробуйте использовать решение в этой теме:

Недействительный источник отчета доступен

Исходя из того, что он говорит, вы должны быть в состоянии заставить его работать, предоставив ConnectionInfo и ReportSource в коде.

0 голосов
/ 11 августа 2015

попробуйте найти какой-либо параметр, который не содержится в вашем отчете

обычно это происходит, когда вы вставляете какой-либо параметр в код, а ваш отчет не содержит этот параметр

0 голосов
/ 01 июня 2013

Как указано в других ответах рода. Сохраните ReportDocument в сеансе (или в чем-то другом) и установите ReportSource.

Пример:

protected void Page_Load(object sender, EventArgs e)
{
          if (Session["ReportSource"] != null)
          {
             CrystalReportViewer1.ReportSource = (ReportDocument) Session["ReportSource"];
          }
          else
          {
             ReportDocument reportDocument = new ReportDocument();
             reportDocument.Load("MyReport.rpt");
             CrystalReportViewer1.ReportSource = reportDocument;
             Session["ReportSource"] = reportDocument;
          }
}
0 голосов
/ 16 апреля 2012

Благодаря @ Răzvan Panda.Полный код приведен здесь.

protected void Page_Load(object sender, EventArgs e){ 
    CrystalDecisions.CrystalReports.Engine.ReportDocument report =
                            new CrystalDecisions.CrystalReports.Engine.ReportDocument();

                        TableLogOnInfos crtableLogoninfos = new TableLogOnInfos();
                        TableLogOnInfo crtableLogoninfo = new TableLogOnInfo();

                        ConnectionInfo crConnectionInfo = new ConnectionInfo();
                        Tables CrTables;
                        report.Load(Server.MapPath("~/Reports/Monthly/CrMonthly.rpt"));

                        crConnectionInfo.ServerName = ConfigurationManager.AppSettings["Server4Crystal"].ToString();//[SQL SERVER NAME]
                        crConnectionInfo.DatabaseName = ConfigurationManager.AppSettings["Database4Crystal"].ToString();//[DATABASE NAME]

                        crConnectionInfo.UserID = ConfigurationManager.AppSettings["User4Crystal"].ToString();//[DB USER NAME]
                        crConnectionInfo.Password = ConfigurationManager.AppSettings["Password4Crystal"].ToString(); //[DB PASSWORD]

    //LOOP THROUGH EACH TABLE & PROVIDE LOGIN CREDENTIALS
                        CrTables = report.Database.Tables;
                        foreach (CrystalDecisions.CrystalReports.Engine.Table CrTable in CrTables)
                        {
                            crtableLogoninfo = CrTable.LogOnInfo;
                            crtableLogoninfo.ConnectionInfo = crConnectionInfo;
                            CrTable.ApplyLogOnInfo(crtableLogoninfo);
                        }

    //PROVIDE PARAMETERS TO CRYSTAL REPORT, IF REQUIRED.
                        ParameterField paramField = new ParameterField();
                        ParameterFields paramFields = new ParameterFields();
                        ParameterDiscreteValue paramDiscreteValue = new ParameterDiscreteValue();

                        paramField.Name = "PARAMETER_NAME";
                        paramDiscreteValue.Value = "PARAMETER_VALUE";
                        paramField.CurrentValues.Add(paramDiscreteValue);
                        paramFields.Add(paramField);
    //ADD MORE PARAMETERS, IF REQUIRED....


                        StoreMonthlyViewer.ParameterFieldInfo = paramFields;
                        StoreMonthlyViewer.ReportSource = report;
    //FINALLY REFRESH REPORT
                        StoreMonthlyViewer.RefreshReport();
                        StoreMonthlyViewer.ToolPanelView = CrystalDecisions.Web.ToolPanelViewType.None;
}
0 голосов
/ 01 марта 2012

Ну, это не большая проблема, вам просто нужно создать сеанс вашего источника данных.Затем передайте его при загрузке страницы.Все отчеты Crystal Report будут работать правильно.

Если вам нужна дополнительная помощь или код, дайте мне знать.

...