2011-11-13 20 views
1

我有一個加載RDLC報告的aspx頁面。在page_load上加載RDLC

當我在回發中加載報告時(即通過向頁面添加一個按鈕,該頁面什麼都不做,只是發回頁面並調用DoReport()方法),報告加載正常。但是,如果我嘗試直接加載在頁面加載的報告(即我把在Page_Load中的將DoReport()方法,該網頁似乎無休止地運行,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_); 

} 

再次 - 這頁面工作正常,如果我從一個命令按鈕

+0

你能在這裏把Page_Load中的代碼? – DeveloperX

+0

也把DoReport(),我更懷疑那造成問題 –

回答

1

調用BuildReport(INT reportID_)指定的報表定義的報告觸發另一個Page_Load中,當的ReportViewer異步填充本身(在顯示「正在載入」符號)。

由於您在每個Page_Load內分配報告定義,因此您的代碼是間接invokin g遞歸地加載Page_Load。

一個簡單的解決方法是執行鍼對的IsPostBack檢查:

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

}