PB小总结(3)

来源:互联网 发布:线下广告投放数据分析 编辑:程序博客网 时间:2024/05/11 18:14

单行选择

    单行选择意味着用户在同一时间只能选择一行。在用户选择一行来执行一些动作,如删除或是 在主从关系的列表中显示详细信息,这是非常有用的。下面是实现允许单行选择功能所应编写的代 码:

Event: RowFocusChanged

if GetRow() > 0 then

    SelectRow( 0, FALSE )

    SelectRow( GetRow(), TRUE )

end if

 

多行的自动选择

    多行的自动选择时,当用户点击一个未加亮的行时,该行将变亮。如果用户点击一个加亮行,该 行将不加亮。为了实现上述行为,您可以将以下的代码放入RowFocusChanged事件中:

Event:RowFocusChanged

Event: RowFocusChanged

Object: Any DataWindow

if GetRow() > 0 then

    if IsSelected( GetRow() ) then

        SelectRow( GetRow(), FALSE )

    else

        SelectRow( GetRow(), TRUE )

    end if

end if

或者简化成为下面的一行代码: 
       if GetRow() > 0 then SelectRow( GetRow(), NOT IsSelected( GetRow())) 

SetSort()排序函数
函数作用: 定义数据窗口控件的排序条件。
函数语法: dwcontrol.SetSort ( format )
z dwcontrol:数据窗口控件名
z formatstring  类型,其值是有效的排序条件。排序条件中可以使用 列名或列号,使用列号时,在列号前加上个#符号。如果 format 参数 的值为 NULL,那么程序运行时 PowerBuilder 会提醒用户输入排序条 件
返 回 值: Integer。函数执行成功时返回 1,发生错误时返回-1
使用说明:在定义数据窗口对象时,可以同时定义排序条件。当使用函数 SetSort()定义新的
 
排序条件后,新的排序条件将取代原有的排序条件。但是,执行 SetSort()函数后, 数据窗口并没有真正排序数据。要完成排序工作,需要执行数据窗口控件的对 象函数 Sort()
按某列排序时,在排序条件中放上列名或列号,后跟上“A”或“D”指明 排序方式。其中“A”表示升序,“D”表示降序。要按多个列排序时,在每个 列的排序条件之间用逗号(,)分隔。下面是两个排序条件示例:
"emp_lname A" "emp_lname A, dept_id D" 如果想让用户在程序运行时指定排序条件,那么可以这样做:以空值作为
SetSort() 函数的参数来调用 SetSort() 。程序运 行时, PowerBuilder  会显 示 “SpecifySort Columns”对话框,让用户指定排序方式。之后调用 Sort()函数完 成实际排序。
 
代码实例:

例 1. 下面的语句为数据窗口控件 dw_employee 定义排序条件,该条件的意义为: 按 emp_status 列升序排序,按 emp_salary 列降序排序:
dw_employee.SetSort("emp_status A, emp_salary D")
示例 2. 下面的语句为数据窗口控件 dw_emp 设置了按 emp_status 列升序排序、 按 emp_salary 列降序排序的排序条件,然后调用 Sort()函数完成实际排序工作:
string ls_newsort

 

检索数据

用于检索数据的函数只有一个,就是Retrieve()函数。
语法格式:
dw_control.Retrieve()
如果数据窗口控件上的数据窗口对象是有检索参数的,就要在这个函数调用时加上检索参数。而且检索参数必须和数据窗口对象中定义顺序一致。
此函数返回一个长整型的数据,代表检索出来的数据行数。如果发生错误,将返回-1

 

更新数据

当用户对数据窗口对象内的数据修改后,想把这些修改反映到数据库中去时,必须使用Update()函数。
语法格式:
dw_control.Update()
这个更新可能成功,也可能失败。一般在这个函数被调用之后,总是要做一个检查。请看下面的例子:
Int li_return
li_return = dw_1.Update()
IF li_return = 1 THEN
     COMMIT USING SQLCA;
ELSE
     ROLLBACK USING SQLCA;
END IF
在这段代码中,首先对数据窗口控件进行更新操作。但是更新只是把数据写入到客户机的内存,并没有提交到数据库中。如果更新成功,就把它提交到数据库中,如果更新失败,就回滚到当前的事务。

 

设置当前行

如果想要在DataWindow中加亮显示某一行或取消加亮显示某一行,可以使用SelectRow()函数。
语法格式:
dw_control.SelectRow(rownumber,select)
其中,rownumber表示要加亮或者取消加这显示的行号,0表示所有行。select是一个布尔类型的值,TRUE表示加亮,FALSE表示取消加亮显示。该函数返回1时表示成功,返回-1时表示失败。
如果想要直接设置某一行为加亮,需要首先取消其它行的加亮显示状态,采用如下的两行代码:
dw_1.SelectRow(0,FALSE)
dw_1.SelectRow(rownumber,TRUE)

 

选择行

如果想要获取当前DataWindow中加亮显示的行,可以使用GetSelectRow()函数。
语法格式:
dw_control.GetSelectRow(rownumber)
其中,rownumber为开始查找的行的行号,0表示从头开始查找。该函数返回一个长整数,表示从rownumber开始查找第一个加亮显示的行的行号。如果失败返回0

 

获取选择行

如果想要获取当前DataWindow中加亮显示的行,可以使用GetSelectRow()函数。
语法格式:
dw_control.GetSelectRow(rownumber)
其中,rownumber为开始查找的行的行号,0表示从头开始查找。该函数返回一个长整数,表示从rownumber开始查找第一个加亮显示的行的行号。如果失败返回0

 

获取数据

如果要从DataWindow的指定行和列中获取数据,就要使用GetItem系列的函数。

这个系列的函数共有五个,分别是对字符串、数字、日期、日期时间和小数。
语法格式:
dw_control.GetItemString(rownumber,column)
dw_control.GetItemNumber(rownumber,column)
dw_control.GetItemDate(rownumber,column)
dw_control.GetItemDateTime(rownumber,column)
dw_control.GetItemDecimal(rownumber,column)
其中,rownumber参数表示行号,column可以是列号或列名。

 

设置数据

与获取数据所用的函数不同,设置DataWindow内指定行列处的数据只要使用一个SetItem()函数就可以了。
语法格式:
dw_control.SetItem(rownumber, column, value)
其中rownumber表示行号,column可以是列号,也可以是列名,value表示要设置的值。但是该必须与DataWindow中指定的行列处的数据类型一致,不然PowerBuilder会报错。
SetItem()函数返回1时表示成功,返回-1时表示失败。

 

数据过滤

如果希望对DataWindow内的数据进行过滤而不重新从数据库中检索数据,可以使用SetFilter()Filter()函数。它们一起完成对数据的过滤功能。其中

SetFilter()函数用来设置过滤条件,Filter()函数用于对DataWindow进行过滤。
语法格式:
dw_control.SetFiter(expression)
dw_control.Fiter()
其中expression是一个字符串,表示过滤的条件,它实际是一个逻辑表达式。
例:
dw_1.SetFilter("id>\'003\' AND name like\'%\'")
dw_1.Filter()
这两个函数都是返回1表示成功,返回-1表示失败。

 

数据检查

PowerBuilder提供了两个函数用于数据的检查,它们是DeleteCount()ModifiedCount(),其作用分别是检查DataWindow中的数据自上一次更新到现在,被删除的行数和被修改的行数。它们一般在窗口的CloseQuery事件中使用,用来检查该窗口的DataWindow中的数据是否有尚未保存的修改
语法格式:
dw_control.DeleteCount()
dw.control.ModifiedCount()
它们分别返回从上一次更新到现在,DataWindow中被删除和被修改的行数。如果没有行被删除或被修改,那么它们返回0。如果出现错误则返回-1
一般情况下,如果窗口中含有可供修改的数据窗口对象,那么在窗口的CloseQuery事件中通常使用如下代码检查数据窗口对象中是否有尚未保存的数据:
Int li_return
IF dw_1.ModifiedCount() > 0 OR dw_1.DeletedCount() >0 THEN
     li_return = MessageBox("提示","数据尚未保存,是否保存?",Question!,YesNoCancel!,3)
     CHOOSE CASE li_return
            CASE 1
                 TriggerEvent(\'ue_save\')
                 RETURN 0
            CASE 2
                 RETURN 0
            CASE 3
                 RETURN 1
    END CHOOSE
END IF

 

设置滚动条

Auto Horz Scroll--自动横向滚动
Auto Vert Scroll--自动纵向滚动
Horz Scroll Bar --横向滚动条
Vert Scroll Bar --纵向滚动条

 

GetChild

功能:得到指定子数据窗口的引用并将其保存到变量中 然后应用程序就可以使用该变量来操作子数据窗口对象

  语法:dwcontrol.GetChild ( name, dwchildvariable )

  参数:dwcontrol 数据窗口控件名

  name string 类型 列名 该列包含了欲得到引用的子数据窗口对象

  dwchildvariable DataWindowChild 类型 用于存储该函数得到的子数据窗口对象的引用

返回值:Integer 函数执行成功时返回 1, 出错时返回-1 , 子数据窗口对象引用保存在变量dwchildvariable 中 如果任何参数的值为NULL , 则GetChild()函数返回NULL

 

any数据类型 

Pb 提供了一种可以保存任何数据类型的ANY类型,它可以存储包括标准类型,对象,结构和数组; 如果一个变量是ANY 类型,那么它的类型就是它保存的数据的类型; 在使用ANY 数据类型的变量时注意以下原则: 可以像对一般的变量一样对ANY变量实施操作; Powerscript的数据类型转换函数可以使用ANY变量作为参数,但是这时的ANY 变量必须含有转换为指定类型的数据。

 

Find()函数

例子:    

ll_return = idwc_funitid.Find("fnumber like '%" + ls_fname + "%'", 1, idwc_funitid.RowCount())

功能:

find()函数有两种语法格式:

①     针对RichText 风格的数据窗口

②     对除RichText风格的数据窗口之外的数据窗口。

语法一针对②:当数据对象不是RichText风格时。在数据窗口控件中查找满足条件的下一行。

dwcontrol.find(expressionstartend)

参数

dwcontrol:数据窗口控件名                               

expression:一个字符串,用于指定要查找的条件。其值是个逻辑表达式,表达式中可以使用列名。

Start:一个长整数,用于指明从哪一行开始查找,该参数可以大于数据的总行数。

End:一个长整数,用于指明查找到哪一行结束查找。该参数可以大于数据的总行数。如果想从后向前查找,那么让end参数的值小于start参数即可。

返回值

Long。返回指定范围内满足查找条件的第一个数据行的行号。

如果未找到满足条件的行,则函数返回0

出错时返回负值。

如果参数的值为NULL。则find()函数返回NULL

用法:

Find()函数在进行查找时区分大小写。因此,当应用程序在某列中查找某个值时。大小写匹配的行才是找到的行。

当应用程序使用循环方式查找满足条件的所有行时,要注意不要形成死循环。

 

0 0
原创粉丝点击