pb8.0技术

2020-04-16 10:33

在下拉数据窗口中查找与输入数据匹配的数据

本篇文章来源与时代朝阳数据库(原晓通数据库)培训部PowerBuilder资料库。

从下拉数据窗口中查找数据时,一般情况下,需要从下拉数据窗口的第一行开始查找。如果下拉数据窗口中的数据很少,只有十条左右,查找很方便。但是,如果下拉数据窗口的数据很多,如上百条,则查找起来就会很麻烦。

下面讲述一种从下拉数据窗口中查找数据的方法。该方法可以实现:将数据输入该列时,该列自动显示下拉数据窗口中与输入数据最匹配的第一个数据,下拉数据窗口自动滚动到被选数据所在的行,并且高亮度显示该行。

下面举例介绍,步骤如下:

1. 创建窗口win_article_subject,在窗口中放置数据窗口控制dw_1。

2. 创建与窗口win_article_subject相连的数据窗口dw_article_subject,该数据窗口基于表“article_subject”。创建“subject”列的下拉数据窗口dw_subject,该下拉数据窗口基于表“subject”。创建好的窗口及数据窗口如下图所示:

注意,在带有下拉数据窗口的列(“subject”列)中,必须指定该列的“Allow Editing”属性为True。

3. 在窗口中定义如下的实例变量:

long il_rowcount boolean ib_keyword datawindowchild idwc_data string is_mach, is_type

4. 在窗口的open事件写入如下的语句:

ib_keyword = false

5. 在窗口中定义名为“highlight”的用户自定义事件,不指定事件ID号、传入参数和返回值,并在事件中写入如下的语句:

idwc_data.SelectRow(il_rowcount, TRUE)

6. 创建全局函数gf_match_row,函数的参数和返回值定义如下表所示:

参数名 dwc_name s_text i_length s_type s_col_name 参数类型 datawindowchild string int string string reference value value value value 参数传递方式 返回类型为:长整型(Long)。 函数程序如下: string ls_mthtext long ll_mthrow long ll_counter = 1 long ll_row

IF s_type = \检测列的数据类型是否为number //逐行检测下拉数据窗口中与输入数据最匹配的数据所在的行 DO UNTIL ll_counter > dwc_name.RowCount()

ll_mthrow = dwc_name.GetItemNumber(ll_counter, s_col_name) IF Left(string(ll_mthrow), i_length) = s_text THEN ll_row = ll_counter EXIT ELSE

ll_counter = ll_counter + 1 END IF LOOP

ELSE//列的数据类型不是number

//逐行检测下拉数据窗口中与输入数据最匹配的数据所在的行 DO UNTIL ll_counter > dwc_name.RowCount()

ls_mthtext = dwc_name.GetItemString(ll_counter, s_col_name) IF Left(ls_mthtext, i_length) = s_text then ll_row = ll_counter EXIT ELSE

ll_counter = ll_counter + 1 END IF LOOP END IF

return(ll_row) //返回与输入数据最匹配的数据所在行的行号

7. 在数据窗口控制的“clicked”事件中写入如下的程序:

ib_keyword = false

8. 在数据窗口控制(dw_1)的“editchanged”事件写入如下程序:

//定义变量

string ls_search, ls_col_name string ls_attribute integer li_string_length

//获得具有下拉数据窗口列的列名 ib_keyword = false

ls_col_name = dw_1.GetColumnName()

//判别当前列是否具有下拉数据窗口,如果不具有,则退出事件程序 IF dw_1.GetChild(ls_col_name,idwc_data) < 0 THEN return END IF

//获得下拉数据窗口的显示列及其类型 ls_attribute = ls_col_name + \ ls_col_name = this.Describe ( ls_attribute) ls_attribute = ls_col_name+\ is_type = idwc_data.Describe(ls_attribute) //获得输入到列中的文本 ls_search = dw_1.GetText() li_string_length = Len(ls_search) IF li_string_length = 0 THEN return END IF

//找出下拉数据窗口中与输入数据最匹配的行 il_rowcount = gf_match_row(idwc_data, ls_search,+& li_string_length,is_type,ls_col_name) IF il_rowcount <= 0 THEN ib_keyword = FALSE

ELSE

ib_keyword = TRUE

idwc_data.SetRow(il_rowcount) IF is_type = \

string(idwc_data.GetItemNumber(il_rowcount,ls_col_name)) dw_1.SetItem(dw_1.GetRow(),dw_1.GetColumn(), is_mach) ELSE

is_mach = idwc_data.GetItemString(il_rowcount, ls_col_name) dw_1.SetItem(dw_1.GetRow(),dw_1.GetColumn(),is_mach) END IF

//事件editchanged结束后,下拉数据窗口中被选中的行以高亮度显示 parent.PostEvent(\END IF

运行窗口“win_article_type”,在数据窗口中的“subject”列中输入第一个字时,该列显示下拉数据窗口中与输入的第一个字相匹配的数据,下拉数据窗口自动滚动到该行,并且高亮度显示该行。例如,当在“subject”列中输入“工”字时,数据“工业”自动显示到该列中,下拉数据窗口自动滚动并高亮度显示数据“工业”所在的行,如下图所示:

综上所述,使用上面的方法,可以在很短的时间内查找到用户所需的数据,省去了用户在下拉数据窗口中查找的麻烦,提高了输入数据的准确性及查找相关数据的效率。特别是当下拉窗口中的数据特别多而且数据较长的情况下,使用上面的方法可以为用户提供方便,节省时间。

数据窗口中case()函数的使用

本篇文章来源与时代朝阳数据库(原晓通数据库)培训部PowerBuilder 资料库。

写过PowerScript程序的程序员一定在数据窗口条件表达式中使用过“if”语句,那实际是if() 函数,这个函数有三个参数,它们依次为条件表达式、为True时的值、为False时的值。

因为if() 函数只能判断两个条件,所以当条件表达式中不止两个条件时,则需要在第三个参数(为False时的值)中嵌套if() 函数,如果条件很多时,表达式写起来比较困难,别人也不容易读懂。如果我们使用case语句,则可以解决这个问题。

下面举一个用case语句代替嵌套if语句的例子。

首先建立一个数据窗口d_color,如下图所示:

选中salary列,选取其中的“F ont”页,双击salary列,进入Column Object对话框,选中Expression页,如

下图所示:


pb8.0技术.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:中国电信翼支付客户使用手册

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: