PowerBuilder数据窗口编程技巧十则

时间:2007-06-15 来源: 作者: 【字体: 减小 增大收藏 | 投稿
  
PowerBuilder取得巨大成就的原因就是有Datawindow对象,DataWindow是具有功能强大和灵活多变的特点,本人用PowerBuilder开发过一段时间后,总结出一些技巧,以供广大的PB开发者借鉴使用。

  一.如何创建一个报表,如下形式

QuantityRunningTotal
5,0005,000
2,5007,500
3,00010,500
12,00022,500

  对于RunningTotal列,我们可使用计算列:CumulativeSum(Quantityforall),即可达到逐渐递增求和的功能。 财管家.园.fs119.net

  二.数据窗口的数据送缓冲区之前确认的四个步骤判断数据类型是否正确。如不正确则触发ItemError事件。判断数据是否符合有效性规则。如不符合有效性规则,同样触发ItemError事件。判断是否有数据被改动。判断数据是否通过ItemChanged事件,如果数据和ItemChanged相斥,将触发ItemError事件。 财,软联盟,fs119.net

  三.如何在DataWindow中用数据类型为Datetime的列为条件进行查找

  1.当要查找的日期条件是一常数时使用如下表达式:
财管.家园.fs119.net

ls_Find="datetime_col
   =DateTime('1/1/1999')"

  2.当要查找的日期条件是一个变量时使用如下的表达式:

财,软联盟,fs119.net

ls_Find="datetime_col=DateTime('"ls_Date"')"

  3.当要查找的日期条件是一个DateTime数据类型时使用如下表达式:
财管家 园 fs119.net

ls_Find="datetime_col=DateTime('"String(ldt_DateTime)"')"

  四.设置数据窗口Boolean型属性的三种方法

  PowerBuilder提供了三种方法设置数据窗口的布尔型属性,分别是True/False,1/0,'Yes'/'No'。例如:

财 软联盟 fs119.net

dw_1.Object.address.Visible=0dw_1.Object.address.Visible=Falsedw_1.Object.address.Visible='No'

  PowerBuilder在处理上以字符串的形式保存属性,而不考虑属性值是布尔型、长整型或是字符型。
为了进一步理解,可以导出一个数据窗口并查看它的原码,可以发现即使是列的颜色属性它也是使用带双引
号的数字来表达。 财软联盟,fs119.net

  五.如何在DataWindow中快速删除多行

  在开发过程中可能经常有要进行多行删除的操作,一般都使用循环语句进行操作: 财管.家园.fs119.net

FORll_RowOn=1TOdw_1.RowCount()dw_1.DeleteRow(ll_RowOn)NEXT

  一个快速的删除方法是把要删除的行从主缓冲区中移到删除缓冲区中。例如,删除缓冲区中所有的行: 财管,家园,fs119.net

dw_1.RowsMove(dw_1,1,dw_1.RowCount,Primary!,dw_1,1,Delete!)

  不过不要忘了过滤的行在不同的缓冲区中。 财.软联盟.fs119.net

  六.如何在DataWindow的SQL语法中不使用SELECTDISTINCT实现删除重复的行

  起先对你要显示唯一值的列进行排序:"cityA",然后增加如下过滤字符串:"city<>city[-1]orGetRow()=1"

财软.联盟.fs119.net

  七.如何在分组形式的DataWindow中分别显示各组的行号

  当我们为Datawindow的每一行显示行号时,可以简单的放一个表达式为GetRow()计算列。但是对于分组的Datawindow,要分别显示各组的行号,则应使用表达式为GetRow()-First(GetRow()forGroup1)1的计算列。

财软联盟 fs119.net

  八.如何改变列的字体颜色,提醒用户此列已做修改

  在列的Color属性中,输入如下表达式

财管家.园.fs119.net

IF(column_name<>column_name.Original,RGB(255,0,0),RGB(0,0,0))

  在这个条件中,如果此列已改变,则显示红色字体,否则显示黑色字体。这个表达式主要用column_name<>column_name.Original比较当前列的值和原始列的值是否相同来达到判断的目的。

财.管家园.fs119.net

  九.在数据窗口中移走行,但不是去做过滤或删除操作

  RowsDiscard()函数可做到这一点,它在数据窗口中执行移除工作,但被移走的行它不可被删除或做任何修改性的保存。 财 管家园 fs119.net

  十.如何在多行显示的DataWindow中的FooterBand中显示当前数据的首行和最后行的行号

  我们先看两个计算列的表达式:IF(GetRow()=First(GetRow()FORPage),1,0)//1为当前页的第一行 财软,联盟,fs119.net

IF(GetRow()<>1ANDGetRow()=Last(GetRow()FORPage),1,0)//1为当前页的最后一行

  由上面可知,在FooterBand中设置如下计算列表达式: 财管 家园 fs119.net

'Rows'String(First(GetRow()FORPage))'to'String(Last(GetRow()FORPage))'aredisplayed'

  即可达到这项功能。 财,管家园,fs119.net

财 软联盟 fs119.net


上一篇:实现PB数据窗口的多表更新
下一篇:深入了解PowerBuilder的数据窗口

精品课程推荐