标题:[分享]PowerBuilder中DropDownListBox信息的动态更新
只看楼主
天道酬勤07
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2007-10-3
 问题点数:0 回复次数:0 
[分享]PowerBuilder中DropDownListBox信息的动态更新

1 DropDownListBox的建立

  PowerBuiler提供了非常便捷的DropDownListBox的设计方法,其中提示信息可通过几种途径获得:
  . 在建立DropDownListBox时直接输入。当DropDownListBox中提供的提示信息固定且数量较少时一般采用该方法。
  . 利用DataWindow构造 UserObject。当DropDownListBox中所要给出的提示信息内容较多且为某数据表(Table)的部分或全部内容时可采用该方法。设计时将提供信息的数据窗口(DataWindow)嵌入在DropDownListBox之后生成为User Object,并在应用程序的任意窗口内调用这个User Object,可达到提供相同提示信息的目的,具有较好的通用性。
  . 利用DropDownListBox的构造事件。在DropDownListBox脚本(Script)的构造事件中通过DropDownListBox的添加函数AddItem(),既可在列表中填入固定的提示信息,亦可从数据表中根据条件获得提示信息。从数据表中获得提示信息的方法如下:
  首先定义一个Cursor。该Cursor的定义可在脚本中进行,也可以在窗口的Instance Variables中进行;
  在DropDownListBox脚本的选择构造事件(constructor)调用已定义的Cursor从数据表中取出数据并利用AddItem()函数将数据填入列表中。
  利用该方法获得的DropDownListBox中的提示信息不仅可包含数据表中的某一项信息,而且还可以是表中若干项内容的组合,甚至在必要时通过几个Cursor的调用可从多个表中提取信息放入列表中,使其提供的提示信息更为丰富。

2 DropDownListBox中信息的动态更新

  通过以上几种方法建立的DropDownListBox为应用程序的使用带来了极大的方便,在一般情况下可以满足信息辅助输入的需要。但是,在有些情况下,DropDownListBox中所提供的信息不仅仅作为输入的辅助信息,而且还会随所在窗口进行的不同操作而发生改变,这时应将变化的情况及时反映出来,作为用户进行下一步操作的正确依据,即应对DropDownListBox中的信息进行动态更新。为了达到这一目的,使用第三种方法更为有效。可按以下步骤进行:
  (1) Cursor 的定义。如:
  DECLARE c—getdbdbh CURSOR FOR
SELECT ckqkk.bianhao, ckqkk.sjsl, ckqkk.jss
FROM ckqkk
WHERE (ckqkk.cwbz is null or ckqkk.cwbz <> ′D′)
ORDER BY ckqkk.bianhao;
  (2) 建立数组变量与DropDownListBox的对应关系。在Instance Variables中定义数组变量,利用Cursor从数据表中获得信息的同时将其写入数组中,数组元素的下标与信息在DropDownListBox的顺序一一对应。如:
  Long nCount
String sNumber
Dec nTemp1, nTemp2
Long nRow
Open c—getdbdbh;
FETCH c—getdbdbh
INTO :sNumber ,:nTemp1, :nTemp2;
Do While sqlca.sqlcode = 0
nCount += 1
aDBDH[ nCount ] = sNumber

//材料编码

 

 aSJSL[ nCount ] = nTemp1

//总入库数量

aJSSL[ nCount ] = nTemp2

//已结算数量

ddlb—4.Additem(sNumber + Space( 1 ) + String(nTemp1a - nTemp2 ) )
FETCH c—getdbdbh
INTO :sNumber , :nTemp1, :nTemp2;
Loop
Close c—getdbdbh;
    通过上述程序段构造的DropDownListBox的提示信息是某种材料的编码和未结算数量(等于入库总数量-已结算数量),如在材料出库的窗口中使用该DropDownListBox,其中材料编码不会改变,而未结算数量则会随出库操作而发生变化,该项为更新的对象。为此,在完成材料出库操作的事件发生时应触发更新DropDownListBox的操作。
  (3) 信息的动态更新。在PowerBuilder中未提供对DropDownListBox数据项进行修改的函数,但提供了插入与删除函数,为此,我们可借助这两个函数来实现动态更新的操作。当已结算数量的数组元素的值已修改完毕,以下程序段即可实现DropDownListBox信息动态更新的功能:
  String sText
Long nItem
sText = ddlb—4.Text
nItem = ddlb—4.FindItem( sText, 0 )
ddlb—4.DeleteItem( nItem )
ddlb—4.InsertItem(aDBDH[ nItem ]+ String

( aSJSL[ nItem ] - aJSSL[ nItem ] ), nItem)

搜索更多相关主题的帖子: PowerBuilder 动态 Object DataWindow User 
2007-10-03 19:17



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-174860-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.442084 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved