水晶报表打印
水晶报表打印
开发工具与关键技术:VS、
作者:#33
撰写时间:撰写时间:2019年05月02日
在老师MVC教学中学习关于水晶报表打印的知识,自己再理清思路做了一遍。方法步骤:
01、安装水晶报表插件——02、项目引入安装的插件并创建空白报表模板——03、创建数据集——04、设置报表模板——05、控制器写查询方法——06、视图水晶报表打印方法(显示页面)
- 安装水晶报表插件:
02、项目引入安装的插件(1项目中创建新文件夹,2选择创建新建项—3选择Reporting项—4选择插件—5弹出层中选择创建空白报表模板):
03、创建数据集(在存放水晶报表插件的文件夹中,1选择创建添加类——2选择(数据)项——3选择(数据集)项)。
创建好数据集页面后,鼠标右键添加(TableAdapter)要打印的表的数据或者添加(DateTable)自定义表的数据(字段与数据库表字段要对应,包括数据类型)。
04、创建好数据集后,设置报表模板(在字段资源管理器的数据库字段(红色框)中鼠标右键点击数字专家——选择数据源点击(数据项目)——(ADO.NET数据集)添加表)。
添加数据表后,在数据库字段分别拖动需要打印的字段至Section3(详细资料)(绿色框)处,这样就可以获取打印的数据;报表空白区域鼠标右键会显示设置报表的各种功能(蓝色框),可以进行各种样式编辑。如:字体大小、背景颜色、添加文本框等。
05、控制器方法:查询出需要打印数据-——将listEmployee转化为DataTable类型数据——创建对象——将转换的数据放入数据集的数据表中(表名字需要与其对应否则无法获取打印的数据)-——实例化报表模板-——获取报表物理文件地址位置-——将数据加载到文件中——将创建的对象设置为报表数据源-——把ReportDocument转化为文件流-——最后return数据。
public ActionResult PrintEmployeeInfor(int employeeID) { try{ //查询打印的数据 var listEmployee = from tbEmployee in myModel.PW_Employee select new{ tbEmployee.employeeID, tbEmployee.employeeName, tbEmployee.employeeNum, tbEmployee.telphone, tbEmployee.address }; if (employeeID>0) { listEmployee = listEmployee.Where(m => m.employeeID == employeeID); } var listEmployees = listEmployee.OrderBy(m => m.employeeID).ToList(); //将listEmployee转化为DataTable类型数据 DataTable YG = LINQToDataTable(listEmployee); PrintReport.employeeDB DBReport = new PrintReport.employeeDB();//创建对象 DBReport.Tables["PW_Employee"].Merge(YG); //将YG的数据放入数据集的数据表中 PrintEmployee PR = new PrintEmployee();//实例化报表模板 //获取报表物理文件地址 (项目的文件夹位置) string strRptPath = System.Web.HttpContext.Current.Server.MapPath("~/") + "PrintReport\\PrintEmployee.rpt"; PR.Load(strRptPath);//把报表文件加载到ReportDocument PR.SetDataSource(DBReport); //设置报表数据源 Streamstream=PR.ExportToStream(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat); //把ReportDocument转化为文件流 return File(stream, "application/pdf"); //返回 } catch (Exception) { return Json("", JsonRequestBehavior.AllowGet); } } |
06、视图水晶报表打印方法(显示页面)和点击打印按钮后打印的数据(下图打印报表效果)
获取数据——判断是否为空——为空打印数据
function PrintEmployee() { var employeeID = $("#employeeID").val();//获取数据 if (employeeID == "" || employeeID==null) //判断数据是否为空 {employeeID = 0; }//为空赋值为0 if (employeeID == 0) // employeeID数据为0则打印数据 {window.open("PrintEmployeeInfor?employeeID=" + employeeID);} } |