当前位置:首页>> PowerBuilder>> PB入门

全文搜索

精华导读

·EasyERP2004 制造行业通用性ERP管理系统
·PB中表的修改对数据窗口和报表的影响的解决办法
·在PB中实现Word内容的替换
·office xp风格菜单基本版
·用PB制作outlook界面源程序(非原来的老外版本)(
·将所见dw内容(包括计算字段)输出到execl中
·ERP在中国应用面临的问题
·PB中使用FORMULA ONE(实例篇
·控制打印机的动态库,兼容win98/98/me/nt2000/xp
·易佳自定义报表系统
·用例驱动的需求过程实践

最新发表

·软件项目的需求开发与管理
·需求分析之Wiki定义
·软件项目需求管理简述
·项目为什么总是做不完?范围管理要界定
·软件项目获取用户需求的沟通技巧
·高级可跟踪性——基本可跟踪性
·高级可跟踪性——满足论据
·做IT项目要知己知彼
·需求的问题,是一个简单的问题
·企业业务软件工程项目和商业软件产品项目上项目需求管理的不同
·项目中如何使用范围变化管理
·范围管理不佳引致项目陷入困境
·企业软件工程项目和商业软件项目需求管理的不同
·工程项目需求获取的几种方法及其适用环境
·认识软件估算
·我的软件10年:需求的变化就是创新的机会
·《IT项目管理》总结:项目范围管理
·需求变更的代价
·怎样从容应对客户的需求反复?

pb技巧

文章来源:互联网络 文章编辑:admin 添加时间:2004-12-9

 以下的[数据库]代表Database, [表]代表Table,[字段]代表Field或Column。

在设置DataWindow的过滤条件时注意比较符and or not like的先后顺序,最后以括号明显的表示顺序为好,提高可读性,确保结果万无一失。

例如下面的语法就是错误的
dw_1.setFilter("name like '赵%' and sex = 0")
因为and的级别比like优先,所以需要改为
dw_1.setFilter("(name like '赵%') and (sex = 0)")


复制和粘贴Text对象以节约时间

在Datawindow中往会有许多Text对象用于显示一些报表的其他信息,为了节约时间,当有一个text已设置好字体,颜色,你只用简单的用Mouse右键选择此Text,然后从弹出菜单中选择“复制”和“粘贴”即可生成一个同样风格和外观的Text对象,如果需要的话,简单的设置此文本的名称即可。

方便编程,去掉Column名称讨厌的table前缀字符串

在DataWindow数据源中如果有多于一张表,在生成的Column名称会以tablename_field1形式出现,这样在使用Setitem, GetItemxxxxx等函数时免不了要多键入一些字符,如果你在选择数据源时先选择一张主表(通常是需要update的表,使用Setitem,GetItemxxxx函数机会最多的),然后选择需要的列生成Datawindow以后,再改动data source,加入新的表,这样只有新加入表的Column名称才会以tablename_field1形式出现。

用记事本查看Datawindow数据

dw_1.SaveAs("c:\sample.txt", Text!, TRUE)
Run ("Notepad.exe c:\sample.txt", Maximized!)
可以将这段代码放在DoubleClicked(鼠标双击)事件中,实现快速数据转换
利用Query对象快速建立二个具有相同数据源不同表现风格的DataWindow

打开已有的datawindow,然后在Data Source菜单中选择File->Save Query将数据源保存为query对象,这样生成新datawindow时,在出现Select Table 对话框时单击cancel按钮,然后选择菜单File->Open Query调出相应对象,这样就快速生成了Datawindow,这种方法在Data Source由多张表组成的时候很方便。

 

关于Datawindow每页打印固定行的问题
第一步:增加一个计算列,此计算列必须放在Detail段,Expression中输入:
ceiling(getrow()/20) <--这里20还可以用全局函数取代,这样可以允许用户任意设置每页打印多少行。
第二步:定义分组,选择菜单Rows->Create Group...
按计算列字段分组,并一定将check box-->New Page On Group Break选中。
第三步:将此计算列设为不可视。

另外,如果需要最后一页不足补空行。也很简单,如下:
long ll_pagerow = 6 //每页打印行数
long ll_count, ll_row
ll_count = dw_report.retrieve(...) //取得现有报表的总行数
ll_count = ll_pagerow - mod(ll_count, ll_pagerow)
If ll_count < ll_pagerow Then
for ll_row = 1 to ll_count
dw_print.insertrow(0) //补足空行
next
end If



如何动态地使DataWindow中的DropDownDW按某一条件显示内容

关键:使用GetChild,然后使用Retrieve或Setfilter方法即可。

详细说明:Datawindow有两个字段,一个为省份c,一个为城市city,城市为DropDownDw,需要根据省份的动态改变城市的显示内容,编程方法如下(pb6版本):

datawindowchild dwChild
Choose case dwo.name
case "province" //省份发生改变,需要动态更新城市下拉窗口
If this.GetChild("city", dwChild) <> 1 Then
MessageBox("Error", "GetChild Error!")
Return 0
End If
dwChild.Settransobject(sqlca)
//---- 第一种方法 使用setfilter 过滤数据,宜于数据较少300行以下
dwChild.Setfilter(" province = " + data)
//如果是字符型,用下面代码
//dwChild.Setfilter(" province = '" + data + "'")
dwChild.filter()
//---------------------------------------------------------------------------------------//
//--- 或使用第二种方法 使用带参数的 Datawindow,宜用于数据行较多情况
dwChild.Retrieve(data)
//-----------------------------------------------------------------------------------------------//
End Choose



 



对于已有DataWindow增加新的字段需要手工设置Edit limit属性,保证应用程序对用户的友好性。
在你建立一个新的DataWindow时,你通常是选择一个或多个Table,然后选择一个或多个字段,返回Design状态后,Powerbuilder自动设置每一个字符型的字段输入长度限制,例如char(10)的字段,edit limit自动为10。

但是当你返回SQL中选择你漏掉的字段,PowerBuilder不会自动设置输入长度限制Edit limit和Auto Selection选择,这样用户可以输入超过最大长度的字符,而导致弹出不友好的错误提示框。所以需要你自己手工设置Edit Limit。



初始化字段默认值的方法:

使用菜单 Rows -> Column Specifications对话框可以设置字段的初始值,当使用InsertRow函数时PB会自动根据设置来初始化此字段,最常见的用法:

使用Today来对日期型字段赋初值,使用0,1等来初始化一些表示某状态的字段

下面有一些特殊值的设置方法你是否知道呢:

Empty — 0长度的字符串(很有用,免除你在保存数据之前,需要同时判断此字段是否为Null或长度是否为0,即未输入有效值的情况)
Null — 无值(不等同于0长度的字符串)
Spaces — 以空格填充(空格长度根据字段在数据库中的定义自动填充)

在初始值需要根据程序运行时确定,也可以在程序中动态设置,方法是:

dw_contro.object.columnName.initial = 'xxxx'





解决PB中自定义纸张的问题

建议用PowerPrint DLL来解决,或用下面方法:

许多朋友都提到PB对于自定义纸张的问题,在VB中可通过Printer对象来控件纸张的大小,虽然PB有Printer对象,但没有控制纸张大小的属性,只有另寻办法!

下面是一种解决方法,有其它办法的朋友请在留言板中提出或发Email给我,多谢:

需要自定义纸张的程序,一般都是打印票据,而在某些报表又需要按标准纸张打印,所以很多朋友都希望将自定义纸张大小定好,不允许用户改动。首先,可以在Windows95中增加二个打印机(它们除名称不一样,都使用同一个打印端口,同一个打印机驱动程序),名称固定下来(如"票据专用打印机"和"报表专用打印机"),当然,并不是需要大家真正安装二个打印机,根据你的需要分别对这二个打印机设置不同的打印纸张大小,然后在程序中根据需要使用API动态改变当前打印机。最后如果你的系统是作为项目需要卖给其他公司,在安装好以后,为防止非专业人员改动配置,你要以使用Window提供的系统策略管理器设置权限。




美化DataWindow的显示效果

使DataWindow的单双行显示颜色不同,不仅仅可以使你的应用程序更显专业性,并使数据的可读性增强。先调出你需要改动的DataWindow,在Detail band按下右键选择Properties,选择Tab页中的Expressions,在color属性中输入下面内容:(注意是在Detail明细显示段按右键,而不是在Column上)

IF(MOD(GETROW(),2)=0,RGB(192, 192, 192), RGB(255, 255, 255))

马上Preview一下,看一看效果如何。



当Retrieve时不清除原有Datawindow数据

当你调用Retrieve函数,PowerBuilder自动清除原有DataWindow然后Retrieve数据。在Datawindow RetrieveStart事件中,使用Return 2,这样PowerBuilder不会清除原有数据而是追加新数据。

当表(Table)的定义发生改变以后同步DataWindow columns有许多普遍现象是当DataWindow建立以后发现原来字段长度不够而改动Table。例如:将原字段由Char(2)改为Char(4),同步的方法是打开原Datawindow,选择菜单Design->Data Source,先单击此字段(改为不选择状态)紧接着再次单击此字段(重新选择此字段);如果你的Data Source使用的是SQL语法而不是图形方式,则先将此字段加亮选择以后,用“剪切”然后“粘贴”的方法同步。

返回DataWindow设计窗口,PowerBuilder已经自动将Column的Type改正,可以通过菜单Row->Column specifications...查看结果。

另外,如果此字段可编辑,还需要查看它的编辑风格(Edit Styles)是否正确,特别改动是Limit,应从2改为4。

在表格(Grid)风格的DataWindow移动Column

当你建立一个表格风格的DataWindow,你可能需要调整Column的先后顺序,PowerBuilder不允许你在设计状态拖动Column的位置。

窍门是先进入预览(preview)状态,然后就可以拖动Column调整成为你需要的先后顺序。

在表格(Grid)风格的DataWindow放入标题

在国内企业的报表表现形式通常以表格居多,PowerBuilder提供了表格风格的DataWindow,但打印表头需要稍稍下一点功夫。

第一步:先放一个Text(文本框)对象到DataWindow的表头上,在此Text上点击鼠标右键选择Properties->Postion->layer,将layer改为Foreground,这样你就可以改变Text的位置和宽度,然后将此Text的内容改为正确的报表标题即可,注意还需要将此Text的背景改为非透明色,否则会看到表线。

第二步:按第一步做完以后,当用户拖动Column改变宽度时,Text框是不会自动变化大小,可以有两种方法处理此问题。一是改动DataWindow的设置,不允许用户改动Column宽度,这种方法可用于报表为固定格式,另一种方法是通过读取DataWindow的Syntax.Modified属性来动态设置Text的宽度。需要详细解决方法的发Email给我。

使用Line建立漂亮的Grid DataWindow的技巧

虽然PowerBuilder有Grid风格的DataWindow,但不够灵活,如果想打印一张边框粗线条或双线,内框为细线条的表格直接使用Grid风格的DataWindow就不能实现。因此许多人都用Tabular风格的DataWindow,然后自己用Line来实现Grid。

在调整线条位置是一个即伤脑筋又伤眼睛的事件,而一旦需要调整行高,所有工作都得重来,试一试用下面方法,会大大减轻你的工作量:

在vertical lines,改变它的属性,在Expressions Tab上,y1行上输入0,y2行上输入rowheight() - 1

在 horizontal lines, 设置 y1 和 y2 = rowheight() - 5

这样PowerBuilder会自动调整线的坐标,你只需要设置横线的长度和x1,x2的坐标即可。

马上Preview一下,看一看效果!

你再也不需要因为行的高度发生改变而重新调整线条位置。

[ ]

首页 评论 打印 刷新 返回顶部 关闭
【相关文章】  【相关评论】
目前暂时没有相关文章