2011-11-13 12 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_); 

} 

再び - 。この私は、レポートビューアーは、非同期的に自分自身を移入したときに別のをPage_Loadは、トリガー(「ロード」記号が表示されている間)レポートにレポート定義を割り当てるコマンドボタン

+0

あなたはここでPage_Loadのコードを置くことができますか? – DeveloperX

+0

もDoReport()を置くと、私は問題を引き起こしていると懐疑的です –

答えて

1

からBuildReport(int型reportID_)を呼び出す場合は、ページが正常に動作します。

すべてのPage_Load内でレポート定義を割り当てるので、コードは間接的に呼び出されますg Page_Loadを再帰的に実行します。

簡単な修正は、IsPostBackプロパティのチェックを実行することです:

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

}