Net.Web打印实现方式之DataWindow.Net

l DataWindow.Net研究

1.所用PB版为PB11.5评估版,破解后即可使用

2.DataWindow.Net控件在安装完PB11.5以后,到安装路径上找相应的Dll文件,在VS程序的工具箱里引用即可。

3.DataWindow.Net控件,必须使用PB11.5制作的PBL和数据窗口才可以运行正常。PB10.2制作的数据窗口不可以使用(已测试过)

4.DataWindow.Net控件在PB11.5没有得到正式授权的情况下(暴力破解那种),无法在Net环境进行可视化开发,如图-1所示:

clip_image001

图-1

必须写代码创建控件、委托事件,代码如图-2所示

clip_image002

图-2

注意:加载DataWindow.Net数据源方式比较简单,不是PB传统方式连接事务再Retrieve方式,直接使用datatable对象即可,见上述代码dw_master.Retrieve(table_daimalb)

5.DataWindow.Net的语法在Net中和PB没有太大差别,容易上手。

6.DataWindoe.Net的打印功能比较强大,调用方式比较简单,代码如图-3所示

clip_image003

图-3

注意:必须指定打印机名称

7.DataWindow.Net对SaveAs功能也支持(未测试)。可以导出成常用文件格式,如图-4所示

clip_image004

图-4

总结:

1.DataWindow.Net在Net环境下,与PB环境下几乎没有差别

2.DataWindow.Net必须使用PB1105版本创建的数据窗口,与公司使用的PB102版本有所冲突

3.DataWindow.Net的打印功能,使用水晶报表可以替换

l Active.DataWindow控件研究

准确说,我也不清楚这么叫确不确切,刚才在网上搜了下,发现很早就有人使用这个东东实现web打印了,我现在才知道有这么个东西,亏自己还说使用PB很多年,汗自己一个先。好了,废话不多说,进入正题。

使用DataWindow.Net在web上打印是可以实现的,通过datawindow.Rerieve(datatable)方式可以实现数据的加载。不过问题来了,如果我想使用GetFullState方法的话,这个方法在PB环境上想必大家不陌生,但在转到net上来,有些问题。代码调试如下:

clip_image006

图-5

我在网上查了下,好像与dll文件有关,后来在sybase官网上看,好像是数组溢出的问题,总之,测试没成功。我们使用这个方法是原汁原味的保留数据窗口里的格式和数据。这样要比加载数据源的方式简单得多。

使用ActiveDataWindow控件,可以在后台加载数据源和格式,然后将整个对象序列化成字符串,前端使用Ajax技术调用后台的字符串直接展示出来即可。

具体代码如下:

clip_image008

图-6

我使用的版本pb11.5的active datawindow,直接按照如上方式加载即可。

后台代码如下:

clip_image010

图-7

思路:使用DataStore对象转载一下,注意:最后方法返回的类型是字符串,对,就是字符串。

前台代码调用如下:

clip_image011

图-8

思路:首先要定义dw对象的各种属性,包括pbl和DataObject属性。然后,就可以从后台获取数据了。

clip_image012

思路:这是获取后数据后的处理方式,看,只要这样dw_Print.SetFullState(result)就可以了。

其中,result是字符串类型。

以上讲得不清楚的,请详细看demo的代码示例。Pbl是11.5的

结论:

结论1:web打印比较简单,完全继承sybase的datawindow所有特性,看看打印的代码就知道了。

结论2:必须使用数据窗口对象,要求必须有pbl(或pbd)文件(相当于数据窗口的容器)。注意:使用pb11以下版本的数据窗口是不可以的。。。

问题:

1. 目前有一个问题没有解决,复合式数据窗口,业务场景如下:

一个窗口print_report,包括三个子窗口,分别是print_head、print_detail、print_foot,如何加载三个子数据窗口的数据。

我使用如下方法是失败的。GetChild和GetChildObject方法是调用ActiveXDw.js库里的,具体大家自己可以去看

//var dwc_detail;

//dwPrint.GetChild(dwc_detail);

//dwPrint.GetChildObject(dwc_detail);

//dwc_detail.SetFullState(result);

不知道哪位高人指点一下

2.我们的项目程序,主体部分是用pb10开发的,使用Net开发出可以在浏览器里展示并打印数据。在开发Net程序时,可不可以借用一下pb的代码。。。例:假设我们的net程序是在pb程序里直接打开浏览器并传入参数的,net里可以再调用一下pb程序里生成打印数据的方法吗?如果这样可以的话,我们的net程序,只负责展示就可以了,其它事情一概不管,代码也只要维护一套就可以了。不知道说得清楚不。。。感觉有些异想天开哈?

 

附代码如下:

PbDataWindowNet

你可能感兴趣的:(window)