为background color 属性设置条件表达式,根据条件的不同,设置不同的颜色。其中有工资小于150、工资在150到250、其它条件三种情况。如果用if语句编写,表达式如下所示:
if (salary <150,255,if(salary between 150 and 250,65286,16711680))
现在我们用case语句代替if语句,表达式如下所示:
CASE (salary when is < 150 then 255 when 150 to 250 then 65286 else 16711680)
预览数据窗口,如下图所示:
比较上面所写的两个表达式,可以看出用case语句所写的表达式更清晰,用户更容易读懂、接受。当条件越多时,使用case语句的优点越明显。
在数据窗口表达式中还可以使用Like、Between、Not Like、Not Between、 Not = 等运算符,下面再举一个例子来使用上面所述的运算符,使用的数据窗口仍是上面的数据窗口,只是取消上面所写的条件表达式。
举例如下:
在数据窗口工作区域选中菜单项Rows->Filter…,在Specify Filter对话框中输入如下表达式:
(author_code like '%2') and (salary between 100 and 200)
预览该数据窗口,执行结果如下图所示:
上例使用了like、between两个运算符,not like、not between等其它运算符的使用与上例类似,可以仿照上例使用。
数据窗口的异步检索方式
本篇文章来源与时代朝阳数据库(原晓通数据库)培训部PowerBuilder资料库。
当数据窗口要检索大量的数据或执行复杂的查询时,用户必须等待检索或查询结束后才能进行其它的工作,这样会浪费很多时间。为了提高系统运行效率,我们可将大量数据的数据窗口设置为异步检索方式,即系统在检索数据的同时用户可执行其它操作。下面举例说明其实现方法:
1. 创建包含一个数据窗口控制、一个命令按钮及一个单行编辑器的窗口对象w_async,如下图所示:
2. 以“auths”表中的部分列(author_code,name,sex)为数据源,创建一“freefrom”显示风格的数据窗口d_auths3,其中包含一个DB OLE对象,该对象对应于auths表中的“picture”列,如下图所示:
3. 将数据窗口d_auths3连接窗口w_async中的数据窗口控制dw_1上,如下图所示:
4. 在窗口w_async中的命令按钮“cb_1”的“clicked”事件中编写下面程序:
disconnect;
SQLCA.DBMS = \SQLCA.AutoCommit = False /*设置数据窗口异步检索*/
SQLCA.DBParm = \ connect;
settransobject(dw_1,sqlca) dw_1.retrieve()
5. 在窗口w_async中的数据窗口控制dw_1的“retrieveend”事件中编写下面程序:
disconnect;
SQLCA.DBMS = \SQLCA.AutoCommit = False
/*将数据窗口恢复为同步执行*/
SQLCA.DBParm = \connect;
6. 创建完毕,运行窗口“w_async”,单击窗口中的“检索”按钮,在数据窗口执行查询的期间,鼠标形状一直保持为箭头形状,用户可执行其它操作。例如,可在窗口中的单行编辑器内输入文字,如下图所示:
本技术的实现主要是通过设置事务对象的“dbparm”属性,设置事务对象“dbparm”属性的语法为:
.dbparm=”async=1”
其中“async=1”代表事务异步执行,“async=0”代表事务同步执行。
使数据窗口按行滚动
本篇文章来源与时代朝阳数据库(原晓通数据库)培训部PowerBuilder资料库。
通常情况下,单击数据窗口的纵向滚动条时,数据窗口缺省是以页为单位上下滚动的。这里介绍一种设置“tabular”、“grid”及“freefrom”显示风格的数据窗口以行为单位纵向滚动的方法。下面举例说明其实现方法:
1. 创建包含一个数据窗口控制的窗口对象w_rowscroll,如下图所示:
2. 为article表为数据源,创建一个grid显示风格的数据窗口d_article,并将其连接到窗口w_rowscroll中的数据窗口控制dw_1上,如下图所示:
3. 在窗口w_rowscroll的“open”事件中编写下面程序:
dw_1.settransobject(sqlca) dw_1.retrieve()
4. 在窗口w_rowscroll的数据窗口控制dw_1上的“other”事件中编写下面程序:
integer li_wordparm
li_wordparm = Message.WordParm if Message.Number = 277 then
if li_wordparm = 1 or li_wordparm = 3 then /*触发下一行或下一页事件*/
/*滚动到下一行,并将焦点置到那一行*/ dw_1.ScrollToRow( dw_1.GetRow() + 1) elseif li_wordparm = 0 or li_wordparm = 2 then /* 触发上一行或上一页事件*/
/*滚动到上一行,并将焦点置到那一行*/ dw_1.ScrollToRow(dw_1.GetRow() - 1) else RETURN end if
/* 使数据窗口不滚动*/ Message.Processed=TRUE end if
5. 编写完毕,运行窗口w_rowscroll,结果如下图所示: