利用General框架开发RDLC报表

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
10 {
11     public partial class FrmReport : Form
12     {
13         /// <summary>
14         /// RDLC文件路径,支持相对路径
15         /// </summary>
16         public string ReportPath { get; set; }
17  
18         /// <summary>
19         /// 报表数据源
20         /// </summary>
21         public DataTable DataSource { get; set; }
22  
23         public FrmReport()
24         {
25             InitializeComponent();
26         }
27  
28         private void FrmReport_Load(object sender, EventArgs e)
29         {
30             // 显示报表代码
31             reportViewer1.ProcessingMode = Microsoft.Reporting.WinForms.ProcessingMode.Local;
32             reportViewer1.LocalReport.ReportPath = this.ReportPath;
33             reportViewer1.LocalReport.DataSources.Clear();
34             reportViewer1.LocalReport.DataSources.Add(new Microsoft.Reporting.WinForms.ReportDataSource("DataSet1", this.DataSource));
35             reportViewer1.RefreshReport();
36         }
37     }
38 }

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

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

GoodsLogic的GetAllData方法代码如下:

1         /// <summary>

2         /// 获取所有数据
3         /// </summary>
4         /// <returns></returns>
5         public DataTable GetAllData()
6         {
7             return DataManager.Default.CreateQuery<Goods>().ToTable();
8         }

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

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

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

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

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

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

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

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

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

时间: 2024-08-29 17:50:28

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

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

三层架构是企业信息管理系统中一种比较流行的架构方式,如大家所知,三层架构将信息系统分为数据访问层(DAL).业务逻辑层(BLL).界面表示层(UI)三部分,三层架构的好处是根据系统中代码所处的层次将系统拆开,而通过业务模型(Model)再进行连接,降低系统各层次之间的耦合度,提升程序开发和后期维护的容易度. 由于三层架构是根据由上至下的层次进行分层,而不是根据功能.应用领域进行分层,所以三层架构在每一层的关注点并不相同,数据访问层关注的是跟数据库打交道的部分,业务逻辑层关注的是业务逻辑处理部分,

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

1.hibernate自动生成的配置文件 hibernate.cfg.xml 有时候是有问题的,会出现 org.hibernate.HibernateException: Could not parse configuration: /hibernate.cfg.xml 原因是自动生成的hibernate.cfg.xml第二个标签引号内容的最末尾有一个空格,删掉即可 <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hiberna

利用Volley框架开发实战代码详解(快速开发,代码直接可以用在实战中...)

说到Volley,则需要了解Volley这个框架,这里我就不用多说了,博客有转载.... 这里我就直接上代码了: 并且有注释: import java.net.URLDecoder; import android.app.Dialog; import android.content.DialogInterface; import android.util.Log; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.Type

基于vs2015的rdlc报表环境部署

先说明一下,rdlc报表是由visual studio来支持的,不是FM. 本次项目采用的是vs2015开发的,当中使用了ReportViewer报表. 两种方式可以支持开发rdlc报表环境: 1)在安装vs时勾选上sql server的一些组件,具体记不清楚了 2)单独安装rdlc依赖的应用程序:ReportViewer.msi.SQLSysClrTypes.msi.我是安装的基于vs2015的版本 先安装SQLSysClrTypes.msi,再安装 ReportViewer.msi . 安装

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

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

利用HTP工具包开发报表

利用这种方式的优点是不需要跑请求就可以打印报表 工具包中常用程序说明 htp.print 语法   htp.print (cbuf | dbuf | nbuf); 作用   generates a line in an HTML document. 参数   cbuf in varchar2 or dbuf in dateor nbuf in number Generates Generates a line in an HTML document based on the value pass

Eclipse+CXF框架开发Web服务实战

一. 说明 采用CXF框架开发webservice. 所用软件及版本如下. ? 操作系统:Window XP SP3. ? JDK:JDK1.6.0_07,http://www.oracle.com/technetwork/java/javase/downloads/index.html. ? Tomcat:apache-tomcat-6.0.14.exe,http://tomcat.apache.org/. ? IDE:eclipse-jee-juno-SR1-win32.zip,http:/

五、利用EnterpriseFrameWork快速开发基于WebServices的接口

回<[开源]EnterpriseFrameWork框架系列文章索引> EnterpriseFrameWork框架实例源代码下载: 实例下载 前面几章已完成EnterpriseFrameWork框架开发系统的三种模式,Web模式.Winform模式以及WCF模式,本章主要针对最后一种模式WebServices模式开发系统对外接口程序的过程: 说明一下为什么框架要把WebService的集成进来,主要还是利用WebService跨平台的优势用来开发外部系统的接口是非常方便的:不管第三方是java平

四、利用EnterpriseFrameWork快速开发基于WCF为中间件的三层结构系统

回<[开源]EnterpriseFrameWork框架系列文章索引> 本章内容与上一张<利用EnterpriseFrameWork快速开发Winform系统(C/S)>关系紧密,WCF模式只是在Winform模式中的界面层和逻辑层之间加入了WCF中间件用来实现双方的通讯,说得更简单一点就是把Winform模式中的winController控制器给拆分为wcfController与wcfclientControlle两个控制器并用WCF实现两个控制器之间的通讯,双方数据传递与Web模