Page_Init与Page_Load-Crystal Reports

时间:2018-10-29 15:29:13

标签: c# crystal-reports

如果我不希望Crystal Report提示输入页面更改参数,我似乎必须在Page_Init之间进行选择。或者,如果我希望我的下拉列表能够正常工作以设置参数,请使用Page_Load。我想两者都做!

我认为这是因为Page_Init期间下拉列表不存在吗?我该如何进行这项工作?相关代码如下:

ReportDocument rptDoc;
dsfeeEarnings ds1;
protected void Page_Init(object sender, EventArgs e)
{
    var dt = new DataTable();
    ds1 = new dsfeeEarnings();
    dt.TableName = "Crystal Report Fee Earnings";
    dt = getFeeEarnings1();
    ds1.Tables[0].Merge(dt);
    rptDoc = new ReportDocument();
    rptDoc.Load(Server.MapPath("Report.rpt"));
    rptDoc.SetDataSource(ds1);
    CrystalReportViewer1.ReportSource = rptDoc;
}

dsfeeEarnings是与报告一起提供的.xsd文件。 getFeeEarnings1()是处理下拉列表的值并开始使用该值运行存储过程的方法。

我尝试将上面的代码放入if (!IsPostBack)块中,但这似乎完全无法使报告正常工作。

我尝试创建一个会话,这对下拉列表有所帮助,但每次更改页面时,报表仍在询问参数。

1 个答案:

答案 0 :(得分:0)

我使用以下代码修复了此问题:

ReportDocument rptDoc = new ReportDocument();
protected void Page_Init(object sender, EventArgs e)
{
     CrystalReportViewer1.ReportSource = rptDoc;
}

protected void Page_Load(object sender, EventArgs e)
{
    DataTable dt = new DataTable();
    dsfeeEarnings ds = new dsfeeEarnings();

    rptDoc.Load(Server.MapPath("FeeEarningsReport.rpt"));
    rptDoc.SetDataSource(ds);
    dt = getFeeEarnings1();
    ds.Tables[0].Merge(dt);
}