我有一个加载RDLC报告的aspx页面。
当我在帖子上加载报告时(例如,通过向页面添加按钮除了发布页面并调用DoReport()方法之外什么都没做),报告加载正常。但是,如果我尝试直接在页面加载时加载报表(即我将DoReport()方法放在Page_Load中,页面似乎无休止地运行,并且Page_Load被调用了数百次。
protected void Page_Load(object sender, EventArgs e)
{
if (!string.IsNullOrEmpty(Request.QueryString["ReportID"]))
{
BuildReport(Convert.ToInt32(Request.QueryString["ReportID"]));
}
}
private void BuildReport(int reportID_)
{
Database db = DatabaseFactory.CreateDatabase();
DataTable tbl = db.ExecuteDataSet(CommandType.Text, "select top 10 * from TABLE_NAME").Tables[0];
RdlcBuilder rdlcBuilder = new RdlcBuilder(reportID_); //custom class that builds the RDLC based on the report ID
XmlDocument xmlDoc = new XmlDocument();
Bind(rdlcBuilder.GetRdlcStream(xmlDoc), tbl);
}
private void Bind(Stream reportDefinitionStream_, DataTable dataSource_)
{
ReportViewer1.LocalReport.DataSources.Clear();
ReportViewer1.Width = new Unit(700);
ReportViewer1.Height = new Unit(1200);
ReportViewer1.LocalReport.EnableExternalImages = true;
ReportViewer1.LocalReport.DataSources.Add(new ReportDataSource("DataSetName", dataSource_));
ReportViewer1.LocalReport.LoadReportDefinition(reportDefinitionStream_);
}
再次 - 如果我从命令按钮
调用BuildReport(int reportID_),这个页面工作正常答案 0 :(得分:1)
当ReportViewer异步填充自身时(在显示“加载”符号时),将报表定义分配给报表会触发另一个Page_Load。
由于您在每个Page_Load中分配报告定义,因此您的代码会间接地间接调用Page_Load。
一个简单的解决方法是对IsPostBack执行检查:
protected void Page_Load(object sender, EventArgs e)
{
if(IsPostBack)
return;
//...
// Assign report definition.
//...
}