AutoCAD 3DMAX C语言 Pro/E UG JAVA编程 PHP编程 Maya动画 Matlab应用 Android
Photoshop Word Excel flash VB编程 VC编程 Coreldraw SolidWorks A Designer Unity3D
 首页 > PowerBuilder

在PB 7.0中实现多数据窗口的连续打印

51自学网 http://www.wanshiok.com

  PowerBuilder最吸引人的地方就是她那强大的数据窗口技术,它为展现数据的本质提供了丰富的手段,数据窗口能够从多种数据源提取数据,然后以多种风格展现在用户面前,对于一个PB程序员能否用好用活数据窗口是那么的重要,同时也反映出编程人员的一定技术水平。相信在看了本文之后一定会对你编写程序有所帮助,文中如有任何不妥之处还请同仁们多多指教。

  在实际的应用中我们或许会碰到用户有这样的要求,在第一张报表上打印一个客户的购买商品的统计数据,以后的每页显示的是他购买商品的明晰清单。也就是相当于打印两份报表,一份是统计报表,另一份是明细表。单纯就这两份报表而言对于任何一个PB程序员来说都不是什么难事,很容易就可以搞定,我们完全可以分两张报表打印给用户,但这还总是让我们觉得似乎缺了点什么,毕竟用户是想让这两份报表作为一个整体出现,最起码的要求是它们的页号应该连续,并且同时也能告之用户总共有多少页。这就涉及到多个数据窗口连续打印的问题。

  首先,统计和明细的结果是根据用户输入的条件来得到的,这是个不定的结果,我们无法预先得知会有多少条数据,更别说需要多少页了。即便是我们能够确定有多少条数据也会因为用户打印机的纸张设置不同而会出现不同的显示结果。其次,要在统计表和明细表里显示两张报表的总页数,这个有点难度,毕竟对于两张报表来说都是个未知数,即对于统计表来说,它可以知道自己的总页数,但不知道明细表的总页数。同样对于明细表也是这样,只知道自己的总页数,而不知道统计表的总页数。这样很难在两张报表里分别显示它们的页数之和。虽然如此可对于它们自己而言当前是第几页还是能够确定的,这个只要调用数据窗口的内嵌函数Page()就可以很容易的得到。

  下边我们就通过一个简单的例子来探讨如何实现多个数据窗口连续打印技术。程序首先让用户输入客户号,然后系统根据用户输入的客户号统计出该客户各类商品的购买总数以及订购的每一种商品明细。整个程序的执行如下三副图所示:






  在开始之前先让我们看一下例子中用到的三张表的结构以及它们之间的相互关系,见下图:



  其中,表Customer和表Sales_Order通过cust_id(客户编号)相关联,表Sales_Order和表Sales_Order_Items通过id(销售定单号)相关联。这三张表取自于PB自带的演示数据库。
 
  首先我们要做的第一件事就是制作两张带检索参数的数据窗口,这个很简单我就不细说了。其中,统计表命名为dw_1,明细表命名为dw_2。同时,为了在打印的时候显示给用户“第几页”“总共多少页”的信息,因此在两张报表每页的底端分别加上一个计算域用来显示当前页数和总页数信息。以统计表dw_1为例,在dw_1中增加两个计算域,取名为page_1 和computer_2。见下图:



  接下来要做的就是如何正确给这两个计算域赋值。对于当前页的显示,在前面已经说过了,可以直接在计算域的表达试中调用数据窗口的内嵌函数Page(),因此,在page_1的表达式中写上函数Page()。

<

 

 

 
上一篇:PB中用Windows&nbsp;API制作位图菜单  下一篇:PB中数据窗口的精确页面打印技术