无法在ASP.Net页面中显示报告

| 我已经创建了一个数据集,并在我的水晶报表中使用了它。问题是在设计时我能够显示数据,但是当我使用ASP.Net页面执行数据时,它显示空白页面。以下是我用来以编程方式显示报告的代码:
 /// <summary>
        /// Displays batch report
        /// </summary>
        /// <param name=\"agreementId\"></param>
        private void ShowStatements(string agreementId)
        {
            var crvStatements = new CrystalReportViewer();
            var reportDocument = new ReportDocument();
            reportDocument.Load(Server.MapPath(\"Statements.rpt\"));
            crvStatements.ReportSource = reportDocument;
            var dt1 = new dsStatements.usp_GetBillDetailsByAgreementIdDataTable();
            var dt2 = new dsStatements.usp_GetTransactionTypesByAgreementIdForBillDataTable();
            var adapter1 = new usp_GetBillDetailsByAgreementIdTableAdapter();
            var adapter2 = new usp_GetTransactionTypesByAgreementIdForBillTableAdapter();
            adapter1.Fill(dt1, agreementId);
            adapter2.Fill(dt2, agreementId);
            //var statements = new dsStatements();
            //statements.Tables.Add(dt1);
            //statements.Tables.Add(dt2);
           // reportDocument.SetDataSource(dsStatements);

            crvStatements.RefreshReport();
        }
请注意,我没有在页面上使用任何控件。我正在以编程方式添加报告查看器,报告源和数据集。请帮帮我。我需要它。我正在将VS2010与CR 2010一起使用     
已邀请:
您能否提供在运行时创建Crystal Report Viewer而不是仅在页面上创建控件的原因?有人这样做是为了使他们可以不显示而导出,但是我看不到任何代码。 我尚未对此进行测试,但是我相信,如果页面上具有查看器控件,则下面的方法会起作用。
private void ShowStatements(string agreementId)
    {
        //var crvStatements = new CrystalReportViewer(); //created on the page
        ReportDocument reportDocument = new ReportDocument();
        reportDocument.Load(Server.MapPath(\"Statements.rpt\"));
        crvStatements.ReportSource = reportDocument;
        System.Data.DataTable dt1 = new dsStatements.usp_GetBillDetailsByAgreementIdDataTable();
        System.Data.DataTable dt2 = new dsStatements.usp_GetTransactionTypesByAgreementIdForBillDataTable();
        System.Data.DataSet statements = new System.Data.DataSet();
        statements.Tables.Add(dt1);
        statements.Tables.Add(dt2);
        reportDocument.SetDataSource(dsStatements);

        crvStatements.DataBind();
    }
我假设报表是用报表中链接的这些表设置的,并且您可能必须给数据表起一个名字,以便Crystal知道如何将每个数据表映射到报表中的对应表。如果可能,您可以尝试将报告限制为仅接受一个表,直到计算出加载逻辑为止。 如果每个数据表都代表一个子报表的数据,那么您将不得不遍历这些报表并手动设置数据源。 我希望这会有所帮助,但我想得太快了,所以我可能错过了一些事情。如果它不起作用,请提供评论,我们可能会解决所有问题。     
RefreshReport();
使报告显示为空。在加载数据集之前尝试一下。     

要回复问题请先登录注册