水晶报表——打印
开发工具与关键技术:VS C#
作者:梁茵茵
撰写时间:2019年 4月 26日
我们需要打印页面上的数据的时候可以使用水晶报表这个插件来实现,那么肯定是先安装这个插件,怎样判断是否按照成功,在项目文件夹中点击新建项就可以知道了。安装完成就可以设计报表模板了,在设计模板格式的时候要特别细心。每次打印出来的表头的数据字段是不会改的,详细资料里的数据就会自动循环判断页面的数据,页脚的页数在打印的时候也会自动的判断去设计。在主报表设计好格式之后可以到主报表预览那边看到打印出来的效果,不满意还可以继续设计。
设计好打印的模板就可以到控制器那定义这个方法了,为了用户可以查询全部数据也可以筛选部分数据打印,所以也做了一个查询的操作。查询出一个集合的类型,把查询的数据绑定给数据集的数据表里,注意还不可以把查询出来的数据直接赋值给这个数据集的数据表里,要它转换为DataTable类型
DataTable dt = LINQToDataTable(listAchiement);
要给这个数据表赋值的步骤如下:
第一步:实例化数据集
printReport.ReportDB myDB = new printReport.ReportDB();
第二步:将dt的数据放入数据集的数据表中
myDB.Tables["具体的某一张表"].Merge(dt);
第三步:实例化报表模板,再把数据给到这个报表模板
AchievementReport rp = new AchievementReport();
第四步:获取报表物理文件地址
string strRptPath = System.Web.HttpContext.Current.Server.MapPath("~/")
+ "Areas\\ExaminationManagement\\PrintReport\\AchievementReport.rpt";
第五步:把报表文件加载到ReportDocument
rp.Load(strRptPath);
第六步:设置报表数据源
rp.SetDataSource(myDB);
把ReportDocument转化为文件流
Stream stream = rp.ExportToStream(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat);
返回文件流
return File(stream, "application/pdf");
在控制器定义好打印这个方法后就可以在页面那调用这个方法了,获取表头的列并赋值,再判断获取列的数据是否为空。如果用户没有筛选数据就点击了打印的按钮,就出现一个提示框来提醒用户"是否打印全校数据?若不需要请筛选数据";如果用户点击确定按钮就把全校的数据打印出来;如果用户点击取消按钮就关闭提示框。把打印的数据以window.open();的方式打开。
总结:要打印页面的数据需要安装一个插件,水晶插件可以提供这个功能。判断安装成功后就在区域新建一个文件,在这个文件里放两个文件夹,一个文件夹放数据集,一个文件夹放报表模板。
怎么添加一个数据集:在数据集这个文件夹里右键添加,数据,数据集。添加数据集之后就添加数据集里的表。
数据集的表有两种添加方法:一种是SQL语句添加,这种添加方式是把这个表都添加进来;
一种是直接添加再设置表名和列,不要忘记还要设置属性。
因为最后是要把数据集的数据表里的数据赋值到报表模板上的。添加数据集里的表之后就可以到报表模板那设计打印的格式,你想要打印出来的样式是什么样的就可以在报表模板里设计,设计好模板之后就给数据集的表添加数据,再实例化这个报表模板,再把数据放到报表模板里,最后以流文件的形式返回回去。
效果图如下:每次打印出来表头的列是不会改变的