如果rdl報表已經設計好並部署到報表服務器上,我們已經可以通過報表服務器去訪問報表了。不過這還是不夠的,因為報表的使用者往往是一些非技術人員或維護人員,並沒有服務器的訪問權限。所以為了方便報表使用者瀏覽報表,我們開發者往往會把報表嵌套到網頁中。接下來我將為大家介紹報表嵌套網頁的方法。
假設在我的報表服務器中已經存在以下報表。
然后我們打開VS,在網站中新建一個aspx網頁,在工具箱里找到 報表--ReportViewer,把控件拖放到頁面中。
如果是10.0版本以上的ReportViewer還需要在頁面上添加ScriptManager控件。
打開頁面的后台代碼進行編輯。假設我們要在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 }
在瀏覽器中查看頁面。
現在已經成功把報表嵌入到頁面了。