一步一步教你使用AgileEAS.NET基础类库进行应用开发-WinForm应用篇-入库业务结尾工作-演示单据的打印

简介:

回顾与说明

     首先给大家说声抱歉,上一周忙了一些其他的事,博客也就差不多一周没有更新,让关注AgileEAS.NET平台的朋友们久等了,希望大家能继续关注AgileEAS.NET平台,关注AgileEAS.NET平台所采用的架构设计实践和AgileEAS.NET平台背后的一些软件工程实践思考。
     前面我用了至少两篇直接的文章对“商品入库”模块进行了详细的说明,我想大家已经很清楚的知道商品入库处理的流程、技术特别以及特别查询的缓存查询技术。为什么我要在这么一个简单的模块费多少大的口舌呢?
    因为,“商品入库”是一个在管理信息系统(MIS)之中非常典型的应用场景,在这个很小的应用场景之中,我们涉及到了字典信息查询、中间结果保存、事务处理以及马上要进行的“票据打印”,可以说基本是一个信息系统中在线事务处理或者数据采集应用的一个缩影,当我们能熟练的能使用AgileEAS.NET平台开发这样的应用的时候,那么MIS系统将在我们面前没有一些难度。

本文的内容

     前面的文章,我已经把“商口入库”模块之中的字典查询以及其中使用的缓存技术、中间数据记录、业务的处理及事务等进行了详细的介绍,今天本文的重点是入库单(票据)打印业务。
     那么这是一个什么场景呢,当我们点击“入库”按钮完成入库今年的保存之后,我们需要点击“打印”按钮完成入库票据的打印,或者当我们完成入库按钮之后完成入库之后即打印本次业务的业务票据,操作界面上有“直接输出打印机”的选项,如果选中则不显示打印预览对话框。
image
 

准备报表,以备调用

      首先我们制做报表,打开报表设计器ReportDesigner.Start.exe,通过菜单“文件”-->“新建”-->“对象报表”,打开“新建数据对象报表”对话框,然后选择“数据对象”Tab页,点击“浏览”选择编译目标目录中的“Product.DAL.SQLServer.dll”,在类型下接列表之选择Product.DAL.SQLServer.ProductInList:
image
       现在我们单击“确定”按钮,使用报表设计器调整报表格式,达到以下样式:
 
image
 
        我们可以在报表设计器中预览一下,注意: 因为是基于数据对象的报表不能连接数据库,所以数据都是随机生成的,用于模拟显示。
image
 
        现在报表已经做好,我们把报表定义保存在编译目标目录的Report文件夹中,名称为“商品入库单据.rdl”。

修改程序,控制打印

      报表已经制作好了,现在的任务就是在程序中加载报表,并且绑定要打印的数据,那么数据从那来呢,我们已经完成了商品的入库并且我们知道刚刚完成的入库单号,我们可以通过入库单号来查询入库表,从来得到指定入库单中的入库记录,要达到这样的需求,我们需要在DAL层接口项目Product.DAL.Interface中的IProductInList中增加一个方法:
 1      ///   <summary>
 2      ///  表接口 IProductInList(产品入库)。
 3      ///   </summary>
 4      public   partial   interface  IProductInList
 5     {
 6          ///   <summary>
 7          ///  根据入库票据号查询入库明细。
 8          ///   </summary>
 9          ///   <param name="billCode"> 入库票据号。 </param>
10          void  GetProductInList( string  billCode);
11     }
     同时需要在DAL层SQLService实现项目Product.DAL.SQLServer中的ProductInList类中实现这个方法:
 1       ///   <summary>
 2       ///  表对象 ProductInList(产品入库)。
 3       ///   </summary>
 4      public   partial   class  ProductInList:EAS.Data.ORM.Table, IProductInList
 5     {
 6          public   void  GetProductInList( string  billCode)
 7         {
 8             Condition condition  =   this .CreateCondition();
 9             condition.AddElement( " BILLCODE " , billCode);
10              this .Query(condition);
11         }
12     }
     接下来我们来写“打印”按钮的事件处理代码,实现数据提取与报表打印:
 1           private   void  btnPrint_Click( object  sender, EventArgs e)
 2          {
 3              IProductInList productInList  =  DALHelper.DALManager.CreateProductInList();
 4              productInList.GetProductInList( this .previouBillCode);
 5 
 6               if  (productInList.Rows.Count  ==   0 )
 7              {
 8                  MessageBox.Show( " 没有需要打印的数据! " " 提示 " , MessageBoxButtons.OK, MessageBoxIcon.Information);
 9                   return ;
10              }
11 
12               if  ( this .printForm  ==   null )
13                   this .printForm  =   new  RDLViewDialog();
14 
15               //
16              System.IO.TextReader textReader  =   null ;
17               try
18              {
19                   string  fileName  =  Path.Combine(Application.StartupPath,  " Reports\\商品入库单据.rdl " );
20                  textReader  =   new  System.IO.StreamReader(fileName);
21                   this .printForm.SourceRdl  =  textReader.ReadToEnd();
22              }
23               finally
24              {
25                   if  (textReader  !=   null )
26                      textReader.Close();
27              }
28 
29               this .printForm.DataObject  =  productInList;
30 
31               if  ( this .cbPrinter.Checked)
32                   this .printForm.Print();  // 直接打印
33               else
34                   this .printForm.PrintPreview();   // 打印预览
35          }
      现在,商品入库单-票据打印就解决了,我们来看一下效果吧:
image
      注意: 在实际应用中,在需要频繁的使用单根打印的过程之中会直接输出到打印机而不会使用打印预览对话框,比如在银行、电信、电力、医疗等各行业的窗口业务模块。
 
     至此,“商品入库”模块的相关处理就此结束,接下来演示两个查询类模块“库存查询”与“入库信息查询”。对这东西感兴趣的朋友呢,可以下载了完整代码之后自己看看,有问题请及时的和我联系。
      有关本例所涉及的数据表结构请参考 基于AgileEAS.NET平台基础类库进行应用开发-总体说明及数据定义一文,有关数据对象模型定义文件、文档、DDL脚本请下载: http://files.cnblogs.com/eastjade/demo.db.doc.sql.rar,本例完整代码下载: Product.Demo.rar

链接

QQ群:116773358

本文转自 agilelab 51CTO博客,原文链接:http://blog.51cto.com/agilelab/603067

相关文章
|
4月前
|
算法 Java 调度
|
4天前
|
开发框架 前端开发 JavaScript
采用C#.Net +JavaScript 开发的云LIS系统源码 二级医院应用案例有演示
技术架构:Asp.NET CORE 3.1 MVC + SQLserver + Redis等 开发语言:C# 6.0、JavaScript 前端框架:JQuery、EasyUI、Bootstrap 后端框架:MVC、SQLSugar等 数 据 库:SQLserver 2012
|
4月前
|
小程序 安全 JavaScript
.NET微信网页开发之通过UnionID机制解决多应用用户帐号统一问题
.NET微信网页开发之通过UnionID机制解决多应用用户帐号统一问题
.NET微信网页开发之通过UnionID机制解决多应用用户帐号统一问题
|
4月前
|
C# Windows
C#安装“Windows 窗体应用(.NET Framework)”
C#安装“Windows 窗体应用(.NET Framework)”
50 0
|
4月前
|
C# 数据安全/隐私保护
一款实用的.NET Core加密解密工具类库
一款实用的.NET Core加密解密工具类库
|
4月前
|
存储 文字识别 C#
一个基于百度飞桨封装的.NET版本OCR工具类库 - PaddleOCRSharp
一个基于百度飞桨封装的.NET版本OCR工具类库 - PaddleOCRSharp
|
5月前
|
数据采集 开发框架 JavaScript
基于.NET Core内置浏览器窗体应用程序界面框架
基于.NET Core内置浏览器窗体应用程序界面框架
45 0
|
3月前
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
38 0