如果我不希望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)
块中,但这似乎完全无法使报告正常工作。
我尝试创建一个会话,这对下拉列表有所帮助,但每次更改页面时,报表仍在询问参数。
答案 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);
}