如何在回发后生成Crystal Report Viewer显示报告

时间:2012-04-24 20:54:53

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

我的页面上有一个下拉列表,一个标签和一个CR Viewer。当我从DD中选择报告时,我会更新标签以显示当前选定的报告,并更新CRV以显示报告。

标签更新很好,我只是把它作为测试,以确保其他控件正确更新。另一方面,CRV始终是一个要求。我选择一份报告并没有显示出来。我选择另一份报告,然后我之前选择的报告显示出来。

下面发布的代码是在我添加标签之前,但没有其他任何内容被更改。

using System;
using DataAccess;
using CrystalDecisions.CrystalReports.Engine;

namespace Reporting
{
    public partial class CRViewer : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (IsPostBack) return;
            ReportDropDown.Items.Add("Select a report");

            var reports = Data.ExecutSql("select * from ngmasterdb..reports");
            while (reports.Read()) ReportDropDown.Items.Add(reports["Name"].ToString());
            reports.Close();
        }

        protected void ReportDropDown_SelectedIndexChanged(object sender, EventArgs e)
        {
            var reportInfo = Data.ExecutSql("select * from ngmasterdb..reports where Name = '" + ReportDropDown.SelectedValue.Replace("'", "''") + "'");

            try
            {
                ReportDocument rptdoc = new ReportDocument();

                if (!reportInfo.Read()) return;
                var file = reportInfo["ReportFile"].ToString();
                if (file == null || file.Trim() == "") return;

                ReportSource.Report.FileName = file;
                CrystalReportViewer1.RefreshReport();
            }
            finally
            {
                reportInfo.Close();
            }
        }
    }
}

我相信aspx中唯一感兴趣的是DropDown控件的AutoPostBack设置为true。如果您仍然希望看到aspx,请告诉我,我会发布它。

1 个答案:

答案 0 :(得分:0)

最初我基本上是这样做的:

ReportSource.Report.FileName = rptFileName;
CrystalReportViewer1.ReportSource = ReportSource;

当我摆脱ReportSource(一个CrystalDecisions.Web.CrystalReportSource对象)并改为执行此操作时:

CrystalReportViewer1.ReportSource = rptFileName;

然后它开始表现正常。我之前尝试过这种方法(或者至少我确信我做了,虽然现在看起来不是这样......)但是在文件路径方面遇到了一些错误。

我不知道为什么我在尝试此操作之前遇到了错误,我仍然不知道为什么即使使用我正在尝试的方法控件也不会正常运行,如果有人有任何信息随便提醒我。