一步一步教你使用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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一、应用场景与出发点 同一个系统中,为了解决不同的客户可能需要设计不同的单据打印模板,实现此方法可能是: 1、设计不同的自带RDLC报表文件,根据当前客户加载不同的报表并打印 2、GDI+绘图 和 打印组件 ,不同的客户创建不同的绘图XML格式的模板内容 3、其他第三方组件 主要对比一下前两种方法,第一种方法不好之处在于,不灵活,开发者必须地每个客户制订一个报表,不推荐采用。第二种方法,修改对应的模板内容就可以了, 模板内容可以是Xml文件,也可以是存放在数据库中的Xml格式字符串。推荐采用这种方法。然后这种方法的也有一个棘手问题 :如何让用户快速、方便地设计打印模板,本示例就是为了解决这个问题。 二、实现思路与原理 功能概要:设计一个界面,支持用户自由添加 要打印的项,文本,直线,图片 等,并且可以方便改变打印项的 字体、颜色、粗细、位置,设计时支持效果预览。 技术要点:GDI+绘图、拖动控件、XML解析、自定义控件 三、相关类介绍 绘图工具类:DrawHelper 实现 xml格式模板 与 打印项 之间进行互相转换,在目标画板中绘制 拖动工具类:WinHelper 实现控件的鼠标拖动,键盘移动 自定义控件:用于显示文字的文本框 TextBoxExt、用于显示直线的标签 LabelExt 主窗体代码:用于用户操作,添加,删除,编辑,打印项 详细介绍请参照我的博文:http://de.cel.blog.163.com/blog/static/51451236201472215450939/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值