报表开发三部曲(三):将rdl报表嵌套到网页【转】
如果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 }
在浏览器中查看页面。
现在已经成功把报表嵌入到页面了。