RDLC是微软推出的自家的报表软件,虽然没有一些第三方的报表软件强大好用,但是作为VisualStudio集成的报表工具,在客户要求不高的情况下还是非常值得一用的,本文将介绍通过General代码生成器和General框架快速的开发一个报表程序。

第一步、生成RDLC报表文件

传统的开发方式是通过VisualStudio创建RDLC报表文件,但这种方式效率很慢,不适合大量报表开发,而通过General代码生成器可以快速的大量生成报表格式,大大提高开发效率,并且生成的报表文件可以在VisualStudio中打开继续修改,并不影响复杂报表格式的制作。用General代码生成器生成RDLC报表文件的过程如下图所示:

生成之后保存为后缀名为.rdlc的报表文件。

第二步、制作报表查看器

如果是WinForm程序,这一步非常简单,只需要新建一个窗体,再从工具箱中将ReportViewer控件拖到窗体上并设置Dock = Fill就可以了。如果工具箱中没有找到ReportViewer,需要手动添加,还有可能工具箱里没有ReportViewer,但手动添加时ReportViewer项已经勾选了,那就需要取消勾选,然后再打开再勾选添加。

RDLC可以通过添加数据集的方式给报表输送数据,但这种方式灵活性太差不适合项目要求。这里,我们采用动态方式给报表输送数据,并做成通用的报表查看器,这样再增加报表时,只需生成新的RDLC文件并指定给报表查看器,再输送指定的数据即可。

所以我们修改报表查看器的后台代码:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.ComponentModel;
 4 using System.Data;
 5 using System.Drawing;
 6 using System.Text;
 7 using System.Windows.Forms;
 8  
 9 namespace Sample.Market.WinForm
 {
     public partial class FrmReport : Form
     {
         /// <summary>
         /// RDLC文件路径,支持相对路径
         /// </summary>
         public string ReportPath { get; set; }
  
         /// <summary>
         /// 报表数据源
         /// </summary>
         public DataTable DataSource { get; set; }
  
         public FrmReport()
         {
             InitializeComponent();
         }
  
         private void FrmReport_Load(object sender, EventArgs e)
         {
             // 显示报表代码
             reportViewer1.ProcessingMode = Microsoft.Reporting.WinForms.ProcessingMode.Local;
             reportViewer1.LocalReport.ReportPath = this.ReportPath;
             reportViewer1.LocalReport.DataSources.Clear();
             reportViewer1.LocalReport.DataSources.Add(new Microsoft.Reporting.WinForms.ReportDataSource("DataSet1", this.DataSource));
             reportViewer1.RefreshReport();
         }
     }
 }

而调用报表查看器打开报表的代码如下:

             DataTable dt = goodsLogic.GetAllData();
             FrmReport frm = new FrmReport();
             frm.ReportPath = "Reports\\GoodsReport.rdlc";
             frm.DataSource = dt;
             frm.Show();

GoodsLogic的GetAllData方法代码如下:

1         /// <summary>

         /// 获取所有数据
         /// </summary>
         /// <returns></returns>
         public DataTable GetAllData()
         {
             return DataManager.Default.CreateQuery<Goods>().ToTable();
         }

可以看到,通过General框架很方便的取到报表数据,再调用报表查看器显示报表,代码非常简单,最终显示结果如下:

如果需要修改报表的格式,比如列宽、标题等,可以将.rdlc文件在VisualStudio中打开进行编辑,或是在代码生成器中修改模板重新生成报表文件。

大家可能还注意到一个问题,就是报表的列头在下一页不见了,要让列头在每页都显示需要对报表文件进行如下修改:

你可能会觉得每一个报表都这样修改太麻烦,那好,我们来修改模板。

先使用文本比较工具比较一下修改前和修改后的.rdlc文件,发现差别只有一行:

那我们相应的在模板中也加入这一行:

重新生成报表文件,再打开报表,可以看到每页都可以显示列头了。

General代码生成器请移步这里下载:

General框架及代码生成器下载地址

利用General框架开发RDLC报表的更多相关文章

  1. 利用General框架进行三层架构开发

    三层架构是企业信息管理系统中一种比较流行的架构方式,如大家所知,三层架构将信息系统分为数据访问层(DAL).业务逻辑层(BLL).界面表示层(UI)三部分,三层架构的好处是根据系统中代码所处的层次将系 ...

  2. 利用CXF框架开发webservice

    开发服务端代码 1. web.xml文件中添加cxf的servlet 2. 定义接口 @WebService(targetNamespace="http://UserInfo.ws.com& ...

  3. 利用SSH框架开发时遇到的各种Bug及解决方法

    .hibernate自动生成的配置文件 hibernate.cfg.xml 有时候是有问题的,会出现 org.hibernate.HibernateException: Could not parse ...

  4. 基于vs2015的rdlc报表运行环境部署

    先说明一下,rdlc报表是由visual studio来支持的,不是FM. 本次项目采用的是vs2015开发的,当中使用了ReportViewer报表. 两种方式可以支持开发rdlc报表环境: 1)在 ...

  5. 会员管理系统的设计和开发(2)-- RDLC报表的设计及动态加载

    在上篇<会员管理系统的设计和开发(1)>介绍了关于会员系统的一些总体设计思路和要点,经过一段时间开发,软件终于完成并发布.在这期间,碰到了不少技术难点,并积累了不少开发心得和经验,本篇继续 ...

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

    用JasperReport+iReport进行Web报表开发 序言 在非常多实际的项目里,报表都是当中十分重要的组成部分,比如把查询结果以报表的形式呈现出来.这里所提到的报表可不是简单的二维表,而是拥 ...

  7. ReportViewer,RDLC 报表开发之个性化样式

    原文:ReportViewer,RDLC 报表开发之个性化样式 报表开发中,客户对样式提出了要求: 1.工具栏上显示每页条数 2.只导出Excel,不需要下拉菜单. 3.报表上显示的图表,分页时,每页 ...

  8. 第十二章 Odoo 12开发之报表和服务端 QWeb

    报表是业务应用非常有价值的功能,内置的 QWeb 引擎是报表的默认引擎.使用 QWeb 模板设计的报表可生成 HTML 文件并被转化成 PDF.也就是说我们可以很便捷地利用已学习的 QWeb 知识,应 ...

  9. 基于MVC4+EasyUI的Web开发框架经验总结(15)--在MVC项目中使用RDLC报表

    RDLC是一个不错的报表,有着比较不错的设计模式和展现效果,在我的Winform开发里面,使用RDLC也是一个比较方便操作,如可以参考文章<DevExpress的XtraReport和微软RDL ...

随机推荐

  1. 2018.7.6 TX射频调试-PP

    1  电路图 2 layout 3调试 Y1是谐振器,Q1是放大器,C3决定功率(C3容值越大,功率越大)L2与C2构成振荡器(用于调节频偏),R1对功率影响最大. a 功率调试 用频谱仪:功率每+3 ...

  2. Brackets (区间DP)

    个人心得:今天就做了这些区间DP,这一题开始想用最长子序列那些套路的,后面发现不满足无后效性的问题,即(,)的配对 对结果有一定的影响,后面想着就用上一题的思想就慢慢的从小一步一步递增,后面想着越来越 ...

  3. mysql开启和使用事件、与服务器重启mysql错误

    一.mysql开启事件 首先用SHOW VARIABLES LIKE 'event_scheduler',查看计划事件有没有开启,他的返回值是off和on. 如果没有开启,可以在my.cnf配置文件中 ...

  4. stack容器

    一.stack特性 stack是一种先进后出(first in last out,FILO)的数据结构,它只有一个出口,stack只允许在栈顶新增元素,移除元素,获得顶端元素,但是除了顶端之外,其他地 ...

  5. centos安装yum源

    网易(163)yum源是国内最好的yum源之一 ,无论是速度还是软件版本,都非常的不错,将yum源设置为163yum,可以提升软件包安装和更新的速度,同时避免一些常见软件版本无法找到.具体设置方法如下 ...

  6. 蓝桥杯 基础练习 BASIC-14 时间转换

    基础练习 时间转换   时间限制:1.0s   内存限制:512.0MB 问题描述 给定一个以秒为单位的时间t,要求用“<H>:<M>:<S>”的格式来表示这个时间 ...

  7. codeforce -39E-What Has Dirichlet Got to Do with That?(博弈+dfs)

    You all know the Dirichlet principle, the point of which is that if n boxes have no less than n + 1  ...

  8. Set,Sorted Set相关命令操作,批量插入及管道,事务

    Set SADD key member [member ...] 向key指定的set集合添加成员,次集合是排重的,从2.4版本后才支持添加多个如果key不存在则创建key以及set集合返回当前操作成 ...

  9. Cassandra 学习二

    Cassandra的架构 Cassandra的设计目的是处理跨多个节点的大数据工作负载,而没有任何单点故障.Cassandra在其节点之间具有对等分布式系统,并且数据分布在集群中的所有节点之间. 1 ...

  10. Solaris10上如何识别新增加的HDLM LUN

    先在磁盘阵列上将新加LUN映射给主机组,然后在光纤交换机上增加相关zone信息.以下是Solaris10上需要执行的操作步骤. 在Solaris10上重新扫描磁盘 -bash-3.2# cfgadm ...