ReportViewer动态报表开发完整步骤

在朋友的邀请下,给他们公司开发一个简单的公司门户网站。本人都多年没有写ASP.NET C#代码了。这几年都在做数据库和商务智能这块。反正朋友说网站不难,就个简单的展现网站,于是就答应了,找了一天到他们公司去听具体的开发需求,听了需求后,觉得难道不是很大,主要的难点在一个在线租赁平台。朋友的公司是做检测设备租赁的。于是就答应了。承诺在1个月内做好。主要是周末和晚上做。

所有的框架和页面展示功能都还可以,很快就开发好了。但是当在开发打印报表的时候,遇到了就障碍,主要是自己以前做的大多是C/S的开发。B/S的做的不多,更没有开发个B/S报表,而且该报表的数据源是动态的。

于是只能找度娘了,找了好多都没有满足我的要求的,大部分都是简单的直接的从数据库表里拉一个静态表做为数据源。要不就是草草的写点步骤,步骤还不是完整的,误导特大。说误导是我自己按照他们的说法做,调试都不成功,那个心情是想骂娘啊。天不负苦心人。终于搞定了。于是下定决心来写一个完整的步骤。希望能给找这方面需求的朋友能直接按照我的步骤一步一步做下去就可以实现结果。

ReportViewer连接静态的数据表就不说了,下面来写下如何实现让ReportViewer绑定动态的数据源:

一,创建一个Web窗体,命名为WebPrintOrder。 在工具箱里拉一个MicrosoftReportViewer控件到该Web窗体里

1,把MicrosoftReportViewer拉到页面自动生成如下页面代码:

<rsweb:ReportViewer ID="ReportViewer1" runat="server">

</rsweb:ReportViewer>

2,查看页面设计就会显示一个报表控件如下:

二,为报表设置数据源

1,添加RDLC报表控件,名称report.rdlc

2,返回到WebPrintOrder设计界面,点击报表的右上角的>,选择我刚才添加的Report.rdlc如下图:

,3

3,双击选择report.rdlc,这个时候显示的是report.rdlc的设计页面,点击【添加新数据源】,这时候就会显示如下的样式,左边多了一个DataSet1,右侧在App_Code的目录下面多了一个DataSet1.xsd的文件。

4,双击DataSet1.xsd文件,并且在该页面上【右键】添加DataTable显示如下图:

5,我创建了一个名称为PrintOrder的表,然后添加具体的表字段如下图:

6,由于我的报表里需要两个数据源,于是我再次添加数据源如下图:

7,当我点击【添加新数据源】的时候,系统自动又帮我创建了一个DataSet2.xsd 的文件在App_Code下面,如下图:

8,再次双击DataSet2.xsd, 添加新的表如下图:

9,添加一个表名称为RentInfo的表如下:

10,回到report.rdlc设计界面就可以看到两个数据源了,分别叫DataSet1 和 DataSet2

三,开始设计报表

1, 在report.rdlc设计页面,把文本框,折线图和表拖到报表页面上

2,表里的数据直接从网站数据源里把相应的表字段拉到表的明细里就可以了。如下图:

3,这里需要重点介绍的是如何在报表里添加参数,选择【报表】----》【报表参数】 如下图:

4, 我的参数设计如下:

5,上面是报表设计和数据源设计完成,下面来看代码如何和此报表关联起来。

四,报表数据源的绑定代码

 protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            if (!string.IsNullOrEmpty(Request.QueryString["ID"]))
            {
                strRentDateCode = Request.QueryString["ID"].ToString();
            }

            BindData();
            BindPrintOrder();

            string CompanyName=Session["Member"].ToString();
            QueryParam queryparam = new QueryParam();

            if (!string.IsNullOrEmpty(CompanyName))
                queryparam.Add("CompanyName", QueryParam.RELATION.EQ, "'" + CompanyName + "'");

            memberModel = member.GetMemberModel(CompanyName);

            DataTable dtPrintOrder = GetPrintOrderData();
            DataTable dtRentInfo = GetRentInfoData();

            ReportViewer1.LocalReport.ReportPath = "Report.rdlc";
            Microsoft.Reporting.WebForms.ReportDataSource rds = new Microsoft.Reporting.WebForms.ReportDataSource("DataSet1_PrintOrder", dtPrintOrder);
            Microsoft.Reporting.WebForms.ReportDataSource rds2 = new Microsoft.Reporting.WebForms.ReportDataSource("DataSet2_RentInfo", dtRentInfo);

            //ReportParameter rptParaA = new ReportParameter("rptParaA", "申请日期");
            //ReportViewer1.LocalReport.SetParameters(new ReportParameter[] { rptParaA });

            //ReportParameter rptParaB = new ReportParameter("rptParaB", "公司名称");
            //ReportViewer1.LocalReport.SetParameters(new ReportParameter[] { rptParaB });

            ReportViewer1.LocalReport.DataSources.Clear();
            List<ReportParameter> para = new List<ReportParameter>();
            //这里是添加两个字段
            para.Add(new ReportParameter("RentDate", strRentDateCode));
            para.Add(new ReportParameter("CompanyName", memberModel.CompanyName));

            para.Add(new ReportParameter("Address", memberModel.Address));
            para.Add(new ReportParameter("Person", memberModel.Person));

            para.Add(new ReportParameter("Phone", memberModel.Phone));
            para.Add(new ReportParameter("Email", memberModel.Email));

            para.Add(new ReportParameter("Count", dtPrintOrder.Rows.Count.ToString()));

            this.ReportViewer1.LocalReport.SetParameters(para);
            ReportViewer1.LocalReport.DataSources.Add(rds);
            ReportViewer1.LocalReport.DataSources.Add(rds2);

            this.ReportViewer1.ZoomMode = Microsoft.Reporting.WebForms.ZoomMode.Percent;
            this.ReportViewer1.ZoomPercent = 100;

            ReportViewer1.LocalReport.Refresh();

        }
    }

五, 运行程序查看报表如下:

导出成PDF如下:

六,至此ASP.NET C# 动态ReportViewer开发完成。如果您能一直看到这里,我相信您肯定能开发出此类报表。希望此文章能给您帮助。欢迎互相学习!我也是B/S报表开发的二把刀,呵呵!

时间: 2024-08-05 15:46:32

ReportViewer动态报表开发完整步骤的相关文章

android项目智慧北京开发完整步骤:第一天

去掉标题,全屏 动画 rlRoot= (RelativeLayout)findViewById(R.id.rl_root); RotateAnimation animRotate=newRotateAnimation(0, 360, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); animRotate.setDuration(1000); animRotate.setFillAfter(true);//保持

利用JasperReport+iReport进行Web报表开发

用JasperReport+iReport进行Web报表开发 序言 在非常多实际的项目里,报表都是当中十分重要的组成部分,比如把查询结果以报表的形式呈现出来.这里所提到的报表可不是简单的二维表,而是拥有复杂表头的.多维的.能够在执行期从数据库中自己主动读取数据.可自己主动分页.拥有丰富的页面元素(图片,超连接等).支持分组和交叉表.支持打印.最好还能导出到Excel或Word…...(汗L).可是显而易见,报表功能越强大,提供的服务越丰富,其复杂度也就越提高,所以仅靠石器时代的手工方式生成报表是

使用JasperReport+iReport进行Web报表开发

前言 在实际工程中非常,报告是其中很重要的一部分,结果以报表的形式呈现出来.这里所提到的报表可不是简单的二维表,而是拥有复杂表头的.多维的.能够在执行期从数据库中自己主动读取数据.可自己主动分页.拥有丰富的页面元素(图片.超连接等).支持分组和交叉表.支持打印.最好还能导出到Excel或Word…...(汗L). 可是显而易见,报表功能越强大,提供的服务越丰富,其复杂度也就越提高,所以仅靠石器时代的手工方式生成报表是不能满足须要的. 所幸,眼下我们所熟知的几款报表工具功能上足够强大,并且都附有非

报表开发实例——动态多层次KPI钻取报表(I)

在报表项目中有时会有动态层次报表,而且还需要层次钻取的场景,开发难度较大.这里记录了使润乾集算报表开发<各级部门KPI报表>的过程. <各级部门KPI报表>初始状态如下图: 当前节点是根节点"河北省",要求报表显示当前节点的下一级节点"地市"汇总的KPI数值.Kpi又分为普通指标和VIP指标两类,共四项.如果点击"石家庄"来钻取的时候,要求能够将石家庄下一级的KPI汇总指标显示出来,如下图: 点击"中心区&quo

报表开发实例——动态多层次KPI钻取报表(II)

在报表开发实例--动态多层次KPI钻取报表(I)中,我们说到了动态层次报表需要层次钻取的场景,并介绍了利用oracle复杂sql的实现方法.这里仍然通过该报表来了解一下使用"脚本+本地文件"的开发方法. 各级部门KPI报表的格式和具体要求参见(I).有所不同的是,报表数据源从数据库表变为本地文件:tree.b(树形结构维表)和kpi.b(指标事实表),数据如下图: Tree文件数据 Kpi文件数据 Tree的叶子节点,通过id字段与kpi表关联.KPI文件每个ID每天都会新增kpi记录

java sql编辑器 动态报表 数据库备份还原 quartz定时任务调度 自定义表单 java图片爬虫

获取[下载地址]   QQ: 313596790   [免费支持更新] 三大数据库 mysql  oracle  sqlsever   更专业.更强悍.适合不同用户群体 [新录针对本系统的视频教程,手把手教开发一个模块,快速掌握本系统] A 集成代码生成器(开发利器)+快速构建表单;            QQ:313596790 freemaker模版技术 ,0个代码不用写,生成完整的一个模块,带页面.建表sql脚本,处理类,service等完整模块 B 集成阿里巴巴数据库连接池druid;

Devexpress报表开发(三):创建主从报表

Devexpress报表开发(三):创建主从报表 此教程是在上一篇的基础上教会大家如何使用Devexpress报表控件来创建主从报表的,我们将从以下几步来实现主从报表: 添加从报表数据 创建从报表 设计从报表布局 显示预览结果 1.添加从报表数据 我们打开上一篇文章的工程,然后右击Report Explorer中的sqlDataSource1,选择Manage Queries(查询管理),然后点击添加. 然后我们按照上一篇文章的步骤添加一张与之关联的表,用作从报表数据. 然后我们在右击sqlDa

Android企业级应用程序开发完整训练:精通Android商业级开发最佳实践的24堂课

从企业级商业实战的角度入手,24小时内通过23个动手实战案例,循序渐进的对Android商业级别的应用程序开发要点各个击破,依托于在多年的Android(6款完整的硬件产品和超过20款应用软件)开发和企业级培训经验(超过150期的次Android的企业内训和公开课),旨在在实务的基础之上帮助你完成任何复杂程序的高质量Android应用程序开发,让Android开发跟上想象的速度.最后,通过ActivityManagerService揭秘Android应用程序一切行为背后的核心根源,让你从此开发应

java sql编辑器 动态报表 数据库备份还原

获取[下载地址]   [免费支持更新]三大数据库 mysql  oracle  sqlsever   更专业.更强悍.适合不同用户群体[新录针对本系统的视频教程,手把手教开发一个模块,快速掌握本系统] A 集成代码生成器 [正反双向(单表.主表.明细表.树形表,开发利器)+快速构建表单; freemaker模版技术 ,0个代码不用写,生成完整的一个模块,带页面.建表sql脚本,处理类,service等完整模块B 集成阿里巴巴数据库连接池druid;  数据库连接池  阿里巴巴的 druid.Dr