报表开发三部曲(三):将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

  现在已经成功把报表嵌入到页面了。

posted @ 2012-05-29 09:50  呼啦啦bear  阅读(807)  评论(0编辑  收藏  举报