C# 在加载页面上加载RDLC

C# 在加载页面上加载RDLC,c#,asp.net,webforms,rdlc,C#,Asp.net,Webforms,Rdlc,我有一个加载RDLC报告的aspx页面 当我在回发时加载报告时(即,通过向页面添加一个按钮,该按钮只回发页面并调用DoReport()方法),报告加载良好。但是,如果我尝试直接在page load上加载报告(即,我将DoReport()方法放在page_load中),则页面似乎无休止地运行,page_load被调用数百次 protected void Page_Load(object sender, EventArgs e) { if (!string.IsNullOrEmpty(Req

我有一个加载RDLC报告的aspx页面

当我在回发时加载报告时(即,通过向页面添加一个按钮,该按钮只回发页面并调用DoReport()方法),报告加载良好。但是,如果我尝试直接在page load上加载报告(即,我将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),当ReportViewer异步填充自身时(当显示“加载”符号时),将报告定义分配给报告会触发另一个页面加载,则此页面工作正常

由于您在每个页面加载中分配报告定义,因此您的代码间接地递归调用页面加载

一个简单的修复方法是执行IsPostBack检查:

protected void Page_Load(object sender, EventArgs e)
{
    if(IsPostBack)
        return;
    //...
    // Assign report definition.
    //...

}

当ReportViewer异步填充自身时(显示“加载”符号时),将报告定义分配给报告会触发另一个页面加载

由于您在每个页面加载中分配报告定义,因此您的代码间接地递归调用页面加载

一个简单的修复方法是执行IsPostBack检查:

protected void Page_Load(object sender, EventArgs e)
{
    if(IsPostBack)
        return;
    //...
    // Assign report definition.
    //...

}

你能把页面加载代码放在这里吗?也把DoReport()放在这里,我更怀疑这会造成问题。你能把页面加载代码放在这里吗?也把DoReport()放在这里,我更怀疑这会造成问题