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);
}
如果我希望我的 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);
}