我们在做一个业务系统的时候,报表是必不可少的.那我们会选择什么方式来实现呢?
    通常实现报表的方式有几种:一种是我们自己做一个报表工具,来实现一些相对比较简单的报表;另一种是找开源的报表工具,自己再改改,来实现报表;还有一种是用像Reporting Services,水晶报表等知名报表.我相信大部分的系统都会选择最后一种实现方式.
   Reporting Services和水晶报表都用过一段时间,个人感觉还是比较喜欢Reporting Services,喜欢的理由有几点:第一它符合SOA架构,系统耦合度不高;第二安装布署方便,SQL Server 2005中已经在安装包中自带了;第三符合我们的开发习惯.
   最近在E8.Net工作流开发架构上刚做了一些报表,有一些也在使用Reporting Services报表的朋友问我,怎么样调用Reporting Service?
   Reporting Services调用有几种方式,第一种是URL方式,第二种是Report View方式.其实实现原理都差不多,只是Report View多了一层封装.
   第一种方式URL方式:http://服务器地址/ReportServer/Pages/ReportViewer.aspx?%2f报表目录%2f报表名称&rs:Command=Render
   第二种方式:~\Reports\frmReportMain.aspx?ReportName=BYTSListReport&Toolbar=true&Parameters=true
      以下是frmReportMain.aspx页面的代码:

        /// <summary>
        ///访问报表方式 0 URL直接访问方式,1 摸拟登录访问方式
        /// </summary>
        public string VisitReportMode
        {
            get
            {
                if (ConfigurationManager.AppSettings["VisitReportMode"] != null)
                    return ConfigurationManager.AppSettings["VisitReportMode"].ToString();
                else
                    return "0";
            }
        }

        /// <summary>
        ///
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void Page_Load(object sender, EventArgs e)
        {
            // 在此处放置用户代码以初始化页面
            if (!IsPostBack)
            {
                this.InitPage();
            }
        }

        /// <summary>
        /// 初始化页面
        /// </summary>
        protected void InitPage()
        {
            //报表服务器
            string reportServer = System.Configuration.ConfigurationSettings.AppSettings["ReportServer"];
            string pStrReportPath = System.Configuration.ConfigurationSettings.AppSettings["ReportPath"];
            //报表名称
            string pReportName = Request["ReportName"].ToString();

            //设置参数
            SetParam();
            rptViewer.ServerUrl = reportServer;
            rptViewer.ReportPath = pStrReportPath + pReportName;

            if (Request["Toolbar"] != null)
            {
                if (Request["Toolbar"].ToString().ToLower() == "true")
                    rptViewer.Toolbar = Microsoft.Samples.ReportingServices.ReportViewer.multiState.True;
                else
                    rptViewer.Toolbar = Microsoft.Samples.ReportingServices.ReportViewer.multiState.False;
            }
            if (Request["Parameters"] != null)
            {
                if (Request["Parameters"].ToString().ToLower() == "true")
                    rptViewer.Parameters = Microsoft.Samples.ReportingServices.ReportViewer.multiState.True;
                else
                    rptViewer.Parameters = Microsoft.Samples.ReportingServices.ReportViewer.multiState.False;
            }
        }

        /// <summary>
        /// 设置报表参数
        /// </summary>
        protected void SetParam()
        {
            if (Request["ReportParam"] != null)
            {
                string sReportParam = Request["ReportParam"].ToString();
                string sReportParamValue = Request["ReportParamValue"].ToString();
                string[] sArrParam = sReportParam.Split(',');
                string[] sArrParamValue = sReportParamValue.Split(',');
                for (int i = 0; i < sArrParam.Length; i++)
                {
                    rptViewer.SetParameter(sArrParam[i].ToString().Trim(), sArrParamValue[i].ToString().Trim());
                }
            }
        }

E8.Net工作流平台 提升企业战略执行力
ITIL与ITSM QQ群4:58342347
.NET企业应用开发与工作流QQ群:17110384 53284682(已满) 42302450(已满)

http://www.feifanit.com.cn/ 

posted on 2008-07-01 10:03  朱明春  阅读(1223)  评论(0编辑  收藏  举报