Page_Init 对比 Page_Load - Crystal 报告

Page_Init vs Page_Load - Crystal Reports

如果我希望我的 Crystal 报告在页面更改时不提示输入参数,我似乎必须在 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) 块中,但这似乎根本无法使报告工作。

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

我使用以下代码解决了这个问题:

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);
}