打印水晶报表

打印水晶报表

开发工具与关键技术:VS 、MVC
作者:小赵
撰写时间:2019/4/6

比如当你上司需要一份报表的时候,这个时候就需要你去设计并打印好上交,那么如何设计、打印报表呢?我总结了一种老师教给的打印报表的方法,这个方法的名字挺好听的,就是打印水晶报表,不多扯淡,进入正题。打印报表数据的效果如下截图:
在这里插入图片描述
首先需要安装水晶报表的插件(编程软件——CRforVS_13_0_14.exe),在相应的项目下创建文件夹装报表模板、数据集;做好这两步之后就开始进入数据集添加数据表、报表模板设计导入数据字段、数据的查询、将IEnumerable类型的集合 转换为DataTable类型、将文件转为流文件传输等;

一、 新建数据集,数据集中添加数据表
数据集建表:1、TableAdapter(T)与数据建立关系,通过使用SQL语句生成表
2、DataTable(D)手动建表,添加表字段,字段的属性要与数据库的表字段的属性
根据报表所需要的内容添加字段;水晶报表插件、新建数据集、新建表的过程如下截图:
在这里插入图片描述二、 报表模板设计导入数据字段
新建空白的报表模板,与数据集建立关系,添加数据表;对报表模板设计:模板的大小、报表头、报表内容、添加一些特殊字段;报表头通过插入文本框,然后设置对象的格式,在页眉添加打印日期的文本框,同样设置对象格式,接着拖入特殊字段生成当前的日期时间为打印时间;报表内容从数据字段上的表按住拖到内容的位置,注意要把字段拖到详细资料部分的中横线会自动生成单元格(报表表格的表头、内容),插入报表的内容之后,可以全选内容单元格设置多个对象格式;添加框、线组合画成表格;在页尾拖入特殊字段第N页共M页。注意在画线画框时要特别小心,不然会出现你不满意的效果,对于追求完美的需要花上时间和精力在设计报表模板上面。下截图是设计报表模板的一部分过程:
在这里插入图片描述
三、 查询数据(本次要打印的为成绩报表)
通过group对查询的结果按照键值进行分组,查询学生的最高成绩,并且作用域重新命名,查询的成绩数据通过OrderByDescending 降序排序 FirstOrDefault()方法返回序列的第一个元素;查询出来的数据作为查询成绩表的数据源,连表查询,join in 连接其他表找到数据源, on 接表名字段.要查询的数据的字段 equals 连表的字段表名.查询数据的字段名;on接连表查询的条件,equals等于,指明查询的数据条件的联系;最后将查询出来的数据.ToList()转换成列表;根据查询的数据需求的条件if判断查询的条件是否相等,where接条件,用lambda表达式写查询语句,格式如:

if (AcademeID >0){
		 listAchievement =listAchievement
				 .Where(p => p.AcademeID == AcademeID).ToList();
	         }

查询数据的方法代码如下截图:
在这里插入图片描述
四、 查询出来的数据转化为DataTable类型数据

定义方法,表示一个内存中的数据表DataTable,公开枚举,该枚举支持在指定类型的集合上进行简单的迭代IEnumerable;方法内容如下截图;
在这里插入图片描述
五、打印报表的准备工作(代码如下截图)
1、实列化数据集
2、 将dt的数据放入数据集的数据表tbAchievement中
3、 实例化自定义报表模板
4、 获取报表模板的路径(报表模板物理文件地址 )
5、 把报表文件加载到ReportDocument(把获取到报表模板的路径strRptPath加载到实列化的报表模板Rp)
6、 给报表设置数据源
7、 把ReportDocument转化为文件流(将报表模板转化为文件流)
8、 返回文件流,以pdf格式打开文件
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44519188/article/details/89071913