報表開發三部曲(三):將rdl報表嵌套到網頁


  如果rdl報表已經設計好並部署到報表服務器上,我們已經可以通過報表服務器去訪問報表了。不過這還是不夠的,因為報表的使用者往往是一些非技術人員或維護人員,並沒有服務器的訪問權限。所以為了方便報表使用者瀏覽報表,我們開發者往往會把報表嵌套到網頁中。接下來我將為大家介紹報表嵌套網頁的方法。

  假設在我的報表服務器中已經存在以下報表。

01

  然后我們打開VS,在網站中新建一個aspx網頁,在工具箱里找到 報表--ReportViewer,把控件拖放到頁面中。

02

  如果是10.0版本以上的ReportViewer還需要在頁面上添加ScriptManager控件。

03

  打開頁面的后台代碼進行編輯。假設我們要在ReportViewer嵌入RP_STUDENT_COURSE_POINT_STA這個報表。我的做法寫一個ReportBind()的方法在PageLoad的時候執行。在這里我的報表服務器設置是通過配置文件獲取的,當然你也可以直接使用字符串作為參數去設置服務器地址。

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Web;
 5 using System.Web.UI;
 6 using System.Web.UI.WebControls;
 7 
 8 public partial class Page_ReportView : System.Web.UI.Page
 9 {
10     protected void Page_Load(object sender, EventArgs e)
11     {
12         ReportBind();
13     }
14 
15     private void ReportBind()
16     {
17         ReportViewer1.ServerReport.ReportServerUrl = new Uri(CommonDefine.getReportServerUrl());//CommonDefine.getReportServerUrl()方法通過配置文件讀取報表服務器的地址
18         ReportViewer1.ServerReport.ReportPath = CommonDefine.getReportProjectName() + "RP_STUDENT_COURSE_POINT_STA";//CommonDefine.getReportProjectName()方法通過配置文件讀取報表所在目錄
19         ReportViewer1.ProcessingMode = Microsoft.Reporting.WebForms.ProcessingMode.Remote;//設定報表的訪問為遠程訪問
20         ReportViewer1.DataBind();
21     }
22 }

   CommonDefine類代碼如下:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Web;
 4 using System.Configuration;
 5 
 6 /// <summary>
 7 ///CommonDefine 的摘要說明
 8 /// </summary>
 9 public class CommonDefine
10 {
11     public CommonDefine()
12     {
13         //
14         //TODO: 在此處添加構造函數邏輯
15         //
16     }
17 
18     /// <summary>
19     /// 取報表服務器地址
20     /// </summary>
21     /// <returns></returns>
22     public static string getReportServerUrl()
23     {
24         return ConfigurationManager.AppSettings.Get("ReportServer").ToString();
25 
26     }
27 
28     /// <summary>
29     /// 取報表項目名
30     /// </summary>
31     /// <returns></returns>
32     public static string getReportProjectName()
33     {
34         return ConfigurationManager.AppSettings.Get("ReportProjectName").ToString();
35     }
36 }

  web.config文件(報表服務器地址的配置):

    <appSettings>
        <!--報表服務器地址-->
        <add key="ReportServer" value="http://localhost/ReportServer/"/>
        <!--報表項目名稱-->
        <add key="ReportProjectName" value="/MYTEST_REPORT_PROJECT/"/>
    </appSettings>

  如果需要在后台為報表傳遞參數,可以使用如下代碼:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Web;
 5 using System.Web.UI;
 6 using System.Web.UI.WebControls;
 7 using Microsoft.Reporting.WebForms;
 8 
 9 public partial class Page_ReportView : System.Web.UI.Page
10 {
11     protected void Page_Load(object sender, EventArgs e)
12     {
13         if (!Page.IsPostBack)
14         {
15             ReportBind();
16             SetReprotParameters();
17         }
18     }
19 
20     private void ReportBind()
21     {
22         ReportViewer1.ServerReport.ReportServerUrl = new Uri(CommonDefine.getReportServerUrl());    //CommonDefine.getReportServerUrl()方法通過配置文件讀取報表服務器的地址
23         ReportViewer1.ServerReport.ReportPath = CommonDefine.getReportProjectName() + "RP_STUDENT_COURSE_POINT_STA";    //CommonDefine.getReportProjectName()方法通過配置文件讀取報表所在目錄
24         ReportViewer1.ProcessingMode = Microsoft.Reporting.WebForms.ProcessingMode.Remote;  //設定報表的訪問為遠程訪問
25         //ReportViewer1.DataBind();
26     }
27 
28     private void SetReprotParameters()
29     {
30         List<ReportParameter> paramList = new List<ReportParameter>();
31         paramList.Add(new ReportParameter("STUDENT_NO", "STD001", true));
32         paramList.Add(new ReportParameter("STUDENT_NAME", "", true));
33         ReportViewer1.ServerReport.SetParameters(paramList);
34     }
35 }

   在瀏覽器中查看頁面。

05

  現在已經成功把報表嵌入到頁面了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM