PowerBuilder取得巨大成就的原因就是有Datawindow对象,DataWindow是具有功能强大和灵活多变的特点,本人用PowerBuilder开发过一段时间后,总结出一些技巧,以供广大的PB开发者借鉴使用。
一、如何创建一个报表
如下形式 Quantity Running Total 5,000 5,000 2,500 7,500 3,000 10,500 12,000 22,500 对于Running Total列,我们可使用计算列:CumulativeSum(Quantity for all),即可达到逐渐递增求和的功能。
二、数据窗口的数据送缓冲区之前确认的四个步骤 判断数据类型是否正确。
如不正确则触发ItemError事件。判断数据是否符合有效性规则。如不符合有效性规则,同样触发ItemError事件。 判断是否有数据被改动。判断数据是否通过ItemChanged事件,如果数据和ItemChanged相斥,将触发ItemError事件。
三、如何在DataWindow中用数据类型为Datetime的列为条件进行查找
1.当要查找的日期条件是一常数时使用如下表达式: ls_Find = "datetime_col = DateTime ('1/1/1999')"
2.当要查找的日期条件是一个变量时使用如下的表达式: ls_Find = "datetime_col = DateTime ('" + ls_Date + "')"
3.当要查找的日期条件是一个DateTime数据类型时使用如下表达式: ls_Find = "datetime_col = DateTime ('" + String (ldt_DateTime) + "')"
四、设置数据窗口Boolean型属性的三种方法
PowerBuilder提供了三种方法设置数据窗口的布尔型属性,分别是True/False, 1/0, 'Yes'/'No'。例如: dw_1.Object.address.Visible = 0 dw_1.Object.address.Visible = False dw_1.Object.address.Visible = 'No' PowerBuilder在处理上以字符串的形式保存属性,而不考虑属性值是布尔型、长整型或是字符型。为了进一步理解,可以导出一个数据窗口并查看它的原码,可以发现即使是列的颜色属性它也是使用带双引号的数字来表达。
五、如何在DataWindow中快速删除多行
在开发过程中可能经常有要进行多行删除的操作,一般都使用循环语句进行操作:FOR ll_RowOn = 1 TO dw_1.RowCount() dw_1.DeleteRow(ll_RowOn) NEXT 一个快速的删除方法是把要删除的行从主缓冲区中移到删除缓冲区中。例如,删除缓冲区中所有的行:dw_1.RowsMove(dw_1, 1, dw_1.RowCount, Primary!, dw_1, 1, Delete!) 不过不要忘了过滤的行在不同的缓冲区中。
六、如何在DataWindow的SQL语法中不使用SELECT DISTINCT实现删除重复的行
起先对你要显示唯一值的列进行排序:"city A",然后增加如下过滤字符串:" city < > city [-1] or GetRow () = 1"
七、如何在分组形式的DataWindow中分别显示各组的行号当我们为Datawindow的每一行显示行号时,可以简单的放一个表达式为GetRow()计算列。但是对于分组的Datawindow,要分别显示各组的行号,则应使用表达式为GetRow() - First(GetRow() for Group 1) + 1的计算列。
八、如何改变列的字体颜色,提醒用户此列已做修改在列的Color属性中,输入如下表达式IF (column_name < >column_name.Original, RG