今天我们来说一下水晶报表该怎么打印。打印水晶报表之前,首先的当然是整理下思路啦!
水晶报表也是肯定要插件的,所以它的第一步就是安装插件,接着创建数据集,再创建报表模板,然后写的就是打印方法了,
一、 安装插件
水晶报表的打印它是要用插件才能实现的,我这里用的是CRforVS的这个插件,这里要非常注意非常注意的一点就是,安装它的时候千万别打开其它的窗口,因为其他的窗口会挤压它到显示的边上。我就试过一次是它跑到边上的,怎么拉它都出不来,而且还没安装完,最后只能重启。
安装完之后要检查一下是否安装成功,方法也很简单,在新建项那里找到Retorting,,点击它之后看到有Crystal Report这个东西,就说明安装成功了,当然你如果没有安装成功是看不到这个的。
二、 添加数据集
添加数据集就在区域里面单击右键直接添加新建项,在新建项里面找到数据集。数据集创建完成后,有两种方式添加表,1.用SQL语句添加,2.直接右键添加,然后自己命名。
如果数据的类型不一样怎么办,这里当然也可以改。设置了名称后,可以在属性的窗口里找到对应的数据类型然后对它进行更改,
添加了表就可以给他设置名称和字段,字段需要什么数据类型就给它设置就好了,表的结构和数据库的也是差不多的,上面的是表名下面内容是字段。
三、 报表模板
打印肯定是要一个模板的,那么就要做一个模板出来。
首先就新建一个模板出来,这个新建的模板就是刚才安装的插件,安装的然后新建它的。新建出来后,我们就可以对它进行设计了,你设计的是什么效果,它打印的模板就是什么效果,比如表格的边框字体的颜色等,都是要自己设计添加的,它还可以添加打印时间等特殊字段,这些都是可以通过单击鼠标右键来添加的。
但是它里面的字段是需要从左边拖过来的,不能自己打的,自己打的是没有效果的,拖的时候可以放在中间的详情资料的杠里面,这样可以快捷地生成表名和内容。
不过,它的字段在拖过来之前要把它和数据库绑定起来,不然就会没数据的。在这里我就发现了一个设计表格的框时的一个小技巧,因为表头和内容是隔开的,在画框的时候就会发现,你如果画了表头的下边框又画了内容的上边框的话,因为下面内容是复制的,所以打印出来就会发现上边框会有两条线,这样挺不美观的,解决方法就是不设置详情的上边框就可以了,这样利用上一行下边框充当下行的上边框,这样就完美地解决了不美观的问题啦!
第一步当然先实例化报表模板,它也是要实例化才能使用的
AchievementReport meiBan = new AchievementReport();//实例化报表模板
因为我们查询出来的数据是不能直接放入数据集里面的,这就需要把它们转化成DataTable这种表格的数据类型才能放入数据集里面,
1. DataTable ubj =LINQToDataTable(listAchievements);
然后就是实例化数据集
PrintReport.ReportDB ubBaobiao = new PrintReport.ReportDB();
接着将ubj的数据放入数据集的数据表里面,后面就以文件流的格式返回回去,
ubBaobiao.Tables["tbAchievement"].Merge(ubj);
模板做好后,就要使用它,它的物理路径就要获取到,获取它是因为要把文件加载到模板里面。
string strRptPath =
System.Web.HttpContext.Current.Server.MapPath("~/") + "Areas\\ExaminationManagement\\PrintReport\\AchievementReport.rpt";
把文件加载到报表模板,同时设置报表的数据源,这就是把报表和数据源关联起来了
meiBan.Load(strRptPath);
meiBan.SetDataSource(ubBaobiao);
最后把它转化为文件流,然后返回到视图里面去
Stream stream =
meiBan.ExportToStream(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat);
return File(stream, "application/pdf"); //返回