powerbuilder:深入了解PowerBuilder的数据窗口

  PowerBuilder(以下简称PB)是Powersoft公司(已被Sybase收购)推出基于客户机/服务器体系结构强有力开发工具,自问世以来深受开发人员好评Datawindow是PB中获取专利技术Control控件,它对数据处理思路方法相当简洁,数据窗口能处理各种显示格式、进行报表打印,对复杂嵌套报表同样处理自如

  数据窗口处理机制首先是根据所需显示方式将数据源表中域设计好,在运行时将所要数据从数据库服务器上下载到客户机上处理,然后将更改后数据进行提交(Commit)或回滚(Rollback)这种处理机制大大降低了数据传输量,减轻了网络负担,也提高了数据处理速度充分利用数据窗口特点,可达到事半功倍效果,但是如果有些问题不加注意就会出现意想不到

  几个

  1. AcceptText

  AcceptText功能是将数据窗口当前编辑数据转移到数据窗口缓冲区中通常在关闭窗口及其他情况下判断是否改变了当前数据如果已改变数据,应提示用户保存这就杜绝了用户在偶然情况下丢失更改数据现象般用ModiedCount和DeletedCount判断数据是否改变

  PB在处理数据窗口时,对应开辟了 4个数据缓冲区,分别为Primary Buffer、Deleted Buffer、Filter Buffer、SortBuffer,其中Deleted Buffer存放被删除记录,Filter Buffer存放被过滤记录,Sort Buffer存放排序记录,Primary Buffer存放其他记录ModiedCount从Primary and Filter Buffers中取数据进行判断,DeletedCount则从Deleted Buffer中取数据进行判断

  PB在接受用户输入时设置了个浮动编辑框,用户输入或更改内容并不直接进入Primary Buffer,而是在用户输入完后进入下个域时,PB首先对它进行有效性检测,通过后转入Primary Buffer如果只改变项数据就关闭窗口则相关数据并没有进入Primary Buffer,系统判断ModiedCount为0,所以不会提示保存数据用AcceptText就可以将浮动编辑框中数据转入缓冲区中,在相应段前加上Accepttext,问题就解决了

  2. FindRequired

  在实际应用中经常需要限制表中些域属性,例如银行客户表中账号就不能为Null在提交数据前检查是否将必须输入数据都赋值是个很好编程习惯FindRequired可以解决此问题,它通过对数据窗口中数据检查,将数据窗口中域属性为Required,而并未赋值域(包括相应行、列)找出来

  为了利用此,在构造数据窗口时就要注意将表中具有NOT NULL属性数据列设为Required(思路方法为:在数据窗口相应域上按鼠标右键或双击左键,弹出Column Object 框,选Edit页,将Required前框选中,按Ok钮即可)在相应事件中插入下列:

  long ror=1 //行数赋1

  eger colnbr=0   //列数赋0

    colname //用来存储列名

  mle_required.Text = "" //窗口中多行编辑Control控件,用来存储找到域行、列号

  DO WHILE row <> 0

  colnbr //继续找下

  IF dw_1.FindRequired(Primary!,row, colnbr,colname, FALSE) < 0 THEN EXIT

  //若出错则返回

  IF row <> 0 THEN

  mle_required.Text = mle_required.Text + String(row) + "~t" &+ colname + "~r~n" //保存查出行、列号

  END IF

  //当ROW返回为 0 则意味再没有查出,跳出循环

  LOOP

  执行完后,多行编辑框中显示为出错地方,用户根据提示可以轻易地更改

  FindRequiredRow、Colnbr参数能自动增加或重置,Colname用来存放列

  数据突出显示及保护:运行中,用户希望显示数据具有明显区分,例如学生成绩(不及格分数要用红色显示),有些数

  据必须只能显示,不能让用户修改;还有些数据在有些时候可以修改,有些时候不能修改等以上情况可归结为两点:

  3. 数据突出显示

  数据窗口应该能使用户很快找到他们想要信息,以颜色区分既满足用户习惯,又不占系统资源,实现起来也很简单以学生管理为例,要求成绩低于60分以红色显示,其他不变思路方法是:在数据窗口中对应成绩列(例如‘/CJ’)上双击鼠标左键或单击鼠标右键,弹出Column Object对话框,选取Expressions页,在Color后框中输入:

  (cj<60,rgb(255,0,0),rgb(192,192,192))此句表示当成绩小于60则显红色,否则灰色显示

  IF语句只可能有两种选择,如果要更多条件判断则必须用CASE语句,例如成绩大于等于90用蓝色,小于60用红色,其他用绿色则应该用以下语句:

  Case(cj WHEN IS >=90 THEN RGB(0,0,255) WHEN IS < 60 THEN RGB(255,0,0) E

  LSE RGB(0,255,0))

  我们还可以输入更加复杂公式

  图形是最好介绍说明语言,为了更好体现数据直观性,可以采用条件位图思路方法的所以称为条件位图,是它随数据性质而决定是否显示,用可以在上述成绩管理数据窗口前面加上个图片.双击位图,弹出Picture Object对话框,选Expressions页,在Visible右编辑框写入(xb=‘0’,1,0),此句意义为当性别为0(女)时蝴蝶出现,否则蝴蝶消失运行起来相当直观读者可以触类旁通,充分利用列属性使用户界面更加友善、漂亮

  4. 数据保护

  有很多情况需要对数据进行保护(即只能显示而不允许修改),学生查询成绩时就是这种情况进行数据保护思路方法有很多,第种是双击要保护列,弹出Column Object,选取Edit页,将Display _disibledevent=‘1’,1,0),其中sfss为表示合同是否实施,如果实施(值为‘1’)则进行数据保护,否则可以更改,此思路方法可以在运行中动态控制数据保护方式

  5.数据窗口多表更新

  在处理数据时,经常需要将几个表中数据放入个数据窗口中进行处理般情况下多表数据源数据窗口只能用于数据检索,而不能更新想要更新数据则采用思路方法为:创建数据窗口(将各个表主键包括进去),修改Taborder使数据能被更改,然后对应各个表创建相应隐含数据窗口,隐含数据窗口数据项和主数据窗口中对应表数据项应完全存盘时将主数据窗口中数据拷贝到相应隐含数据窗口中去,逐个保存各隐含数据窗口中数据即可由此看来,第 2种思路方法更容易理解和接受,实现起来也很简单



Tags:  powerbuilder教程 powerbuilder9.0 powerbuilder powerbuilder

延伸阅读

最新评论

发表评论