WPF使用 Grid++ Report 模板打印票据、条码等。

本文介绍了如何利用Grid++Report组件设计报表模板并实现票据打印,包括下载开发包、添加引用、设计格式、设置字段和数据绑定,以及创建帮助类进行打印操作。

Grid++ Report 这个组件在我们开发过程中可以帮助我们实现一些报表票据的模板,你可以自由的的设计出你需要的格式。不管做票据,还是报表都是很简便明了的。当然,还有许多的报表组件,比如FineReport、FastReport等诸多报表组件。下面分享怎么使用Grid++ Report 实现票据打印。

   使用Grid++ Report 实现票据打印

        1.首先去 锐浪报表工具 官网下载 Grid++ Report 开发者安装包下载 - 锐浪报表工具

        2.这是下载的文件,然后在你的程序中 添加引用 引入 gregn6.dll。

        3.打开Grid++ Report 报表设计器,设计你要的格式 如:

        

 4.设置字段,报表中的字段最好是和你程序中的要打印的数据实体字段相同,这里我是直接连接数据源生成字段。如:

        

5.以上都弄好之后,把设计好的模板放到你程序中

6.编写一个打印的帮助类,这里需要用到 GridppReport 这个类,上面我们已经引用了gregn6.dll,然后这里using一下就好,

 public static class GridPrint
 {
     //定义Grid++Report报表主对象
     private static GridppReport Report;
     private static List<IGRField?> _listFields; // 定义Grid字段集合
     private static QueueNumber _number;//打印的数据

     public static void Print(QueueNumber queue)
     {
         try
         {
             _number = queue;//把数据全局化
             Report = new GridppReport();
             Report.LoadFromFile("./Record/Number.grf");//读取模板在程序中的地址
             //Initialize事件,在报表生成开始时触发,这里我主要做的是字段初始化(当然具体用法根据个人所需可以在报表生成开始时设置)
             Report.Initialize += ReportInitialize;
             //FetchRecord 报表主对象请求数据时触发,这里差不多就是给模板提供对应数据(具体使用 
             方法同上)
             Report.FetchRecord += Report_FetchRecord;
             
             //这里是打印机的一些设置,这里是获取当前使用的打印机然后使用当前的打印机进行打印,如果是使用默认打印机打印的话可以不用设置(我是为了后面做别的设置就先把代码写在这),调用Print方法时会使用默认打印机打印,
             PrinterSettings settings = new PrinterSettings();
             string defaultPrinter = settings.PrinterName;
             Report.Printer.PrinterName = defaultPrinter;//打印机名字
             Report.Print(false);
         }
         catch (Exception ex)
         {
             MessageBox.Show("" + ex.Message, "错误");
         }
     }

     /// <summary>
     /// 字段初始化
     /// </summary>
     private static void ReportInitialize()
     {
         //实例化Grid 字段的集合
         _listFields = new();

         
         //这里直接使用我们的数据实体的字段来当做Grid 字段
         Type myClassType = typeof(QueueNumber);
         PropertyInfo[] properties = myClassType.GetProperties();

         foreach (PropertyInfo property in properties)
         {
             //这个判断是为了屏蔽某个字段,这里是IsRemove,IsCallState这两个字段在Grid 中不需要的,这里就屏蔽掉
             if (property.Name== "IsRemove")
             {
                 continue;
             }
             if (property.Name == "IsCallState")
             {
                 continue;
             }
             _listFields.Add(Report.FieldByName(property.Name));
         }
        
         //如果你有某个字段需要单独定制,例如票据中的总数,但是你实体又没有的,是后续才算出来的,可以这样单独添加
         //IGRField? report = Report.FieldByName("Sum");
         //if (report != null)
         //{
             //_listFields.Add(report);
         //}
     }

     /// <summary>
     /// 载入字段
     /// </summary>
     private static void Report_FetchRecord()
     {
         try
         {
             Report.DetailGrid.Recordset.Append();
             
             
             Type myClassType = _number.GetType();
             PropertyInfo[] properties = myClassType.GetProperties();

             //这里也是遍历数据实体的字段然后筛选Grid 的字段进行赋值,当然,这里是可以拓展的,我这里写的比叫粗糙,在使用时可以自己根据需要进行封装
             foreach (var field in _listFields)
             {
                 if (field?.Name== properties.Where(o=>o.Name== field?.Name).FirstOrDefault()?.Name)
                 {
                     field.AsString = properties.Where(o => o.Name == field.Name).FirstOrDefault()?.GetValue(_number)?.ToString();
                     continue;
                 }
             }
             Report.DetailGrid.Recordset.Post();
         }
         catch (Exception e)
         {
             MessageBox.Show("字段时发生错误" + e.Message);
         }
     }
 }

7.接下来就是调用帮助类了

//因为GridPrint是静态所以不用new了,可以根据需要做改变。Model 就是传入要打印的数据
GridPrint.Print(Model);//打印

这样就可以实现自定义模板打印了,报表也是同理。Grid++Report 详细用法可以去参考相关文档。

在开发过程中遇到这个功能,有什么更好的方式,欢迎指教。

Grid++Report是一款C/S与B/S集成报表工具,功能全面易学易用。C/S开发适用于VB.NET,C#,VB,VC,Delphi,BCB,VFP,易语言等。B/S开发适用于ASP.NET,ASP,PHP,JSP等,支持所有WEB服务器。 Grid++Report6.0版主要新增功能 ★引擎方面 1、增加了一个自由表格部件,可以灵活定义各种自由表格,具有单元格合并功能。 2、部件框增加边距设置,边框增加内层与阴影,虚线边框。 3、文字显示增加段间距、首字缩进与两端分散对齐。 4、分组报表可以按某个统计值的大小对分组项进行排序 5、数据源除了OLE DB外,增加XML、JSON与普通文本数据。 6、在编程接口中增加了很多应用函数,如数据压缩、数字格式化、日期时间解析与格式化、打印机与纸型枚举、文件选择对话框等。 7、其它杂项功能,根据多年收集的用户需求来增加与改进功能,如分组相关系统变量、图像旋转显示等。 ★设计器: 1、设计面板具有缩放设计功能。 2、将关联属性归类为组,方便在设计时集中设置与查看。 3、对象浏览窗口与属性窗口可以隐藏,方便在设计很宽的报表时增大设计面板的区域。 4、设计面板大小跟随明细网格总列宽来改变宽度,方便设计大宽度明细网格报表。 5、部件框锁定功能,被锁定的部件框不允许进行可视化拖放。 6、自动在分组头尾中增加统计框,默认为合计函数,并设置相应的对齐列。 7、数据源连接串可以为 XML 或 JSON 数据源,且可以自动生成字段。设计报表时数据源可连接的类型有:各种数据库、XML或JSON文件、产生XML或JSON的网络URL、EXCEL文件、TEXT文件。 8、设计器增加数据提供事件接口,在设计报表时可以用给报表加载自定义数据源。 ★打印打印预览: 1、横向分页时,在数据不多的情况下,分页直接显示在本页,而不是在下一页。 2、在模板中可以保存默认打印机名称。 3、分组尾支持每页重复打印。 4、如果部件框跨页多次显示了,在新页中再次输出其上下边框。 5、提供编程接口枚举出Windows系统中安装的打印机,以及指定打印机支持的所有纸张类型。 ★查询显示: 1、没有明细网格的报表,背景图可以显示出来。 2、明细数据不多时,表格不会显示下部空白。 ★数据导出: 1、在导出Excel时,能用代码设置页边距等参数 2、在运行时对外观属性的改变可以反映到Excel导出。 ★图表: 1、重新设计图表接口,让图表可视化设计与编程控制更清晰简单。 2、支持更多图表类型,如百分比柱状图、垂直排列的柱图。 3、一个图表中可以混和显示多种不同类型的图形,如一个序列为柱图,另一个序列为曲线图。 4、Y轴可以显示双坐标轴,方便实现双轴柱状图等。 5、图例可以在下方显示,可以多栏显示。 6、增加图表数据记录集,图表数据直接从记录集或XML数据源加载,而不需用代码来加载图表数据。 7、图表方面还有很多细节方面的改进与增强,加强图表功能是本新版本的重要方面。 ★交叉表 1、多数据列交叉表可以将同一列产生的交叉列排列在一起。 2、在合计列中可以排除掉一些列不进行合计。 3、纵向交叉项目列中可以定义统计框或综合文字框表达式,在合计列中关联的字段自动求和,在项目列中关联字段为复制首笔值。 ★子报表: 1、子报表无数据可以自动隐藏。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值