ReportViewer本地处理学习总结

  利用.net中的AJAX控件ReportViewer开发报表功能程序,此控件可以配置为 本地处理模式和远程处理模式,
  • “本地处理模式”是指 ReportViewer 控件在客户端应用程序中处理报表。 所有报表都是使用应用程序提供的数据在本地过程中处理的。  

  • 远程处理模式指由 SQL Server 2008 或在 Reporting Services 报告服务器以上执行的报表处理。 在远程处理模式下,ReportViewer 控件用作查看器,呈现在 Reporting Services 报表服务器上处理的报表。 从数据检索到报表处理的所有操作都是在报表服务器上处理的。

      开发报表功能,开发步骤主要包括:页面添加和配置ReportViewer控件,创建客户端报表定义(.rdlc)文件,配置加载页面的初始化信息。

  • 页面添加和配置ReportViewer控件。从工具箱的报表中添加ReportViewer控件,或者直接添加<reWeb:ReportViewer />节点。并设置控件相关属性。
<form id="form1" runat="server">
        <div>
            <asp:ScriptManager runat="server" ID="scmg"></asp:ScriptManager>
            <rsweb:ReportViewer ID="ReportViewer1" runat="server" Width="100%" Height="100%" OnPreRender="ReportViewer1_PreRender"></rsweb:ReportViewer>
        </div>
    </form>

       ReportViewer为Ajax控件,代码中ScripManager是不可少的。OnPreRender事件方法触发PreRender事件,PreRender事件发生在控件加载后和呈现之前,可以用来保存服务器控件的视图状态中的任何更改。

  • 创建客户端报表定义文件。在资源管理器中添加新建项-Reporting-报表,生成.rdlc文件。设计报表的样式,并配置页面的参数,数据表、数据源、数据集等相关信息。

        

         配置rdlc文件,主要包括途中标出的部分。参数为需要显示出来的参数(大部分从url的参数传递中获取)。数据集合数据源的配置,采用动态添加的方法(从xml文件中添加),使得数据库与报表不关联。添加方法如下:

              1.在资源管理器中右击.rdlc文件,选择打开方式-XML编辑器。

              2.在打开的xml文件中,在<tablix></tablix>节点中添加此表的数据集名称,即<DataSetName></DataSetName>

              3.在<Report/>节点下定义DataSources和DataSets节点,其中可以定义多个datasource和dataset。


<DataSources>
    <DataSource Name="ReportDataSource">
      <ConnectionProperties>
        <DataProvider>SQL</DataProvider>
        <ConnectString />
      </ConnectionProperties>
      <rd:DataSourceID>742b4967-39c8-4f0b-bd07-6972fc277a1d</rd:DataSourceID>
    </DataSource>
  </DataSources>
  <DataSets>
    <DataSet Name="testTableSet">
      <Query>
        <DataSourceName>ReportDataSource</DataSourceName>
        <CommandText />
      </Query>
      <Fields>
        <Field Name="ID">
          <DataField>ID</DataField>
          <rd:TypeName>System.Decimal</rd:TypeName>
        </Field>
        <Field Name="Name">
          <DataField>Name</DataField>
          <rd:TypeName>System.String</rd:TypeName>
        </Field>
        <Field Name="VALUE">
          <DataField>VALUE</DataField>
          <rd:TypeName>System.Decimal</rd:TypeName>
        </Field>
        <Field Name="PID">
          <DataField>PID</DataField>
          <rd:TypeName>System.Decimal</rd:TypeName>
        </Field>
      </Fields>
    </DataSet>
  </DataSets>

  • 配置加载页面的初始化信息。在*.aspx.cs文件的Page_Load()事件方法中设置报表的初始化信息,其中主要包括ReportDataSources,ReportParameters,ReportPath等。
string ReportTitleHeader = "Report Title:";
        string ReportTitle = "Report Title";
        string SearchConditionHeader = "Search Condition:";
        string SC = "Search Condition";
        string RP = "";
        ReportParameter[] rps;
        List<ReportDataSource> lstRDS = new List<ReportDataSource>();
        
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                initPage();
            }
        }

        private void initPage()
        {
            //获取参数值
            ReportTitleHeader = (Request.QueryString["RTH"].Trim().ToString() == "" ? ReportTitleHeader : Request.QueryString["RTH"].Trim().ToString());
            ReportTitle = Request.QueryString["RT"].Trim().ToString() == "" ? ReportTitle : Request.QueryString["RT"].Trim().ToString();
            SearchConditionHeader = Request.QueryString["SCH"].Trim().ToString() == "" ? SearchConditionHeader : Request.QueryString["SCH"].Trim().ToString();
            SC = Request.QueryString["SC"].Trim().ToString() == "" ? SC : Request.QueryString["SC"].Trim().ToString();
            RP = Request.QueryString["RP"].Trim().ToString() == "" ? RP : Server.MapPath("~")+@"Content\Report\rdlc\"+ Request.QueryString["RP"].Trim().ToString();
           
            
            rps=new ReportParameter[]{
                new ReportParameter("ReportTitleHeader",ReportTitleHeader),
                new ReportParameter("ReportTitle",ReportTitle),
                new ReportParameter("SearchConditionHeader",SearchConditionHeader),
                new ReportParameter("SC",SC)
            };
            //获取数据
            string sqlstr = string.Format("select * from testTable where PID='{0}' and VALUE>'{1}'", Request.QueryString["ParentID"].Trim().ToString(), Request.QueryString["Value"].Trim().ToString());
            DataTable dt = ADO.getTable(sqlstr);
            //lstRDS.Add(new ReportDataSource("testTableSet",dt));

            //配置报表初始化信息
            this.ReportViewer1.LocalReport.DataSources.Clear();
            this.ReportViewer1.ProcessingMode = ProcessingMode.Local;
            this.ReportViewer1.LocalReport.ReportPath = RP;//设置.rdlc文件路径
            this.ReportViewer1.LocalReport.DataSources.Add(new ReportDataSource("testTableSet",dt));//向数据集中添加数据。
            this.ReportViewer1.LocalReport.SetParameters(rps);//设置参数值
            this.ReportViewer1.LocalReport.Refresh();//刷新呈现

        }

        protected void ReportViewer1_PreRender(object sender, EventArgs e)
        {
            foreach (RenderingExtension item in ReportViewer1.LocalReport.ListRenderingExtensions())
            {
                if (item.Name=="PDF")
                {
                    FieldInfo fieldInfo = item.GetType().GetField("m_isVisible", BindingFlags.Instance | BindingFlags.NonPublic);
                    fieldInfo.SetValue(item, false);
                }
            }
        }



  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值