Crystal Report的动态查询,"没有有效的报告源。"

时间:2012-07-05 18:21:28

标签: c# asp.net crystal-reports-2010

我正在尝试使用动态数据源创建Crystal Report。当我单击报告按钮时,水晶报告显示正常,但是当我单击任何按钮时,Crystal Report工具栏(即下一页,导出到等),我得到一个错误“无效报告源”的弹出窗口可以。“

以下是我的C#代码:

private void GenerateReport()
{
    using (DataContext reports = new DataContext())
    {
        var results = //Linq Query;

        ReportDocument pr = new ReportDocument();
        pr.Load(Server.MapPath(@"CrystalReport1.rpt"));
        pr.SetDataSource(results.ToList());

        CrystalReportViewer1.ReportSource = pr;
        CrystalReportViewer1.DataBind();
    }
}

非常感谢任何帮助。谢谢你提前。

2 个答案:

答案 0 :(得分:1)

所以,我无法通过其他方式实现这一点,但我确实让它以不同的方式开展工作。首先,我将一个CrystalReportSource控件添加到aspx页面,

<CR:CrystalReportSource ID="CrystalReportSource1" runat="server">
   <Report FileName="CrystalReport1.rpt">
  </Report>
</CR:CrystalReportSource>

然后在代码隐藏文件中,不是将数据源直接设置为CrystalReportViewer1,而是将其设置为CrystalReportSource,然后将其设置为CrystalReportViewer1的报告源。现在一切正常!

using (DataContext reports = new DataContext())
{
    var results = //Linq Query;
    CrystalReportSource1.ReportDocument.SetDataSource(results.AsEnumerable());

    CrystalReportViewer1.ReportSourceID = "CrystalReportSource1";
    CrystalReportViewer1.RefreshReport();
}

答案 1 :(得分:1)

我刚刚使用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  

然后在CrystalReportViewer的Navigate事件中,我将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数据源都将设置为会话中保存的报表文档。