设为首页 | 加入收藏 RSS订阅 | 高级搜索 | 收藏本站 | 论坛
用户名: 密码: 验证码: gdcode 注册
首页 | 财税咨询 | 税收实务 | 纳税辅导 | 税收优惠 | 税务策划 | 财税实务 | 财务研究 | 税务知识 | 财软 | 学院 | 下载 | 数据库技术 | 论坛
logo

PB实现数据窗口动态排序的方法

时间:2007-06-15 来源: 作者: 【字体: 减小 增大点击: 收藏 | 投稿
  

  在PowerBuilder中使用数据窗口检索到的数据往往是无序的,虽然可以通过设置Select语句实现排序的功能,但是数据窗口一旦生成都无法进行动态调整。笔者总结了在已经生成的数据窗口中实现动态排序的三种方法,现介绍给大家。

财管家,园,fs119.net

  一、准备工作

财管.家园.fs119.net

  设计如图1所示的示例窗口。为了更好地比较三种不同的方法,dw—1中的数据来自两个表student和class。student表中包含四个字段sid(学号)、sname(姓名)、saddr(住址)和cid(班号),class表中包含两个字段cid(班号)和cname(班级名称)。
财软联 盟 fs119.net


图1

财,管家园,fs119.net

  二、三种方法的源程序

财,软联盟,fs119.net

  三种方法中的“执行”按钮的代码分别为: 财软.联盟.fs119.net

  方法1:用SetSQLselect()

财软联.盟.fs119.net


  stringls—oldsql,ls—newsql,ls—orderls—column
  ls—oldsql=dw—1.getsqlselect()
  choosecaseddlb—1.text
  case″学号″ls—column=″sid″
  case″姓名″ls—column=″sname″
  case″住址″ls—column=″saddr″
  case″班号″ls—column=″class.cid″
  case″班级名称″ls—column=″cname″
  endchoose
  ifrb—1.checkedthenls—order=″ASC″
  elsels—order=″DESC″
  endif
  ls—newsql=ls—oldsql+″ORDERBY″+&
  ls—column+″″+ls—order
  ifdw—1.setsqlselect(ls—newsql)=-1then
  messagebox(″警告″,″数据设置失败″,stopsign!)
  elsedw—1.settransobject(sqlca)
  dw—1.reset()
  dw—1.retrieve()
  dw—1.setsqlselect(ls—oldsql)

财软联盟 fs119.net

  endif
财管,家园,fs119.net

财管,家园,fs119.net

财管家园,fs119.net

  方法2:用describe()和modify()

财软联盟,fs119.net


  stringls—mod,ls—order,ls—old,ls—column
  ls—old=dw—1.describe(′datawindow.table.select′)
  dw—1.settransobject(sqlca)
window.height=li_height-2*(li_gd-li_y)
next
case5//closetype=5,从左右向中间挤压逐渐消失
li_cenx=li_xli_width/2
forli_gd=li_xtoli_cenxstep1
window.x=li_gd
window.width=li_width-2*(li_gd-li_x)
next
case6//closetype=6,从左上->右下
forli_gd=li_ytoli_heightli_ystep1
window.y=li_gd
window.height=li_heightli_y-li_gd
ifwindow.x<li_xli_widththen
window.x=li_x(li_gd-li_y)
else
window.x=li_xli_width
endif
ifwindow.width>0then
window.width=li_xli_width-window.x
else
window.width=0
endif
next
window.x=li_xli_width
window.y=li_heightli_y
window.width=0
window.height=0

财软联,盟,fs119.net


window.show()
case7//closetype=7,从右下->左上
forli_gd=li_heightto0step-1
window.height=li_gd
ifwindow.width>0then
window.width=li_width-(li_height-li_gd)
else
window.width=0
endif
next
window.x=li_x
window.y=li_y
window.width=0
window.height=0
window.show()
case8//closetype=8,从右上->左下
forli_gd=li_ytoli_heightli_ystep1
window.y=li_gd
window.height=li_heightli_y-li_gd
ifwindow.width>0then
window.width=li_width-(li_gd-li_y)
else
window.width=0
endif
next
window.x=li_x
window.y=li_heightli_y
window.width=0
window.height=0
window.show()
case9//closetype=9,从左下->右上
forli_gd=li_xtoli_xli_widthstep1
window.x=li_gd
window.width=li_widthli_x-li_gd
ifwindow.height>0then
window.height=li_height-(li_gd-li_x)
else
window.height=0
endif
next
window.x=li_xli_width
window.y=li_y
window.width=0
window.height=0
window.show()
case10//closetype=10,从四面到中间 财软联盟 fs119.net
li_ceny=li_yli_height/2
li_cenx=li_xli_width/2
forli_gd=li_ytoli_cenystep1
window.y=li_gd
window.height=li_height-2*(li_gd-li_y)
ifwindow.x<li_xli_cenxthen
window.x=li_x(li_gd-li_y)
else
window.x=li_xli_cenx
endif
ifwindow.width>0then
window.width=li_width-2*(li_gd-li_y)
else
window.width=0
endif
next
window.x=li_cenx
window.y=li_ceny
window.width=0
window.height=0
window.show()
caseelse
window.show()
window.width=li_width
window.height=li_height
window.x=li_x
window.y=li_y
ENDCHOOSE
return0
************************
//调用该函数在窗体的closequery事件中
gf_closequery(w_main,mod(integer(string(now(),"ss")),11))
财.管家园.fs119.net

财.管家园.fs119.net

上面是关闭时的效果,窗体打开时的动态效果的语句跟上面的差不多,在此就不写啦,如果有需要的可以告诉我,我单独发送。谢谢。

财.软联盟.fs119.net


文章摘自网络,如有侵权,请与我们联系.
数据统计中!!
上一篇:窗体动态效果的实现
下一篇:PowerBuilder中数据窗口的数据缓冲区

用户名: 密码: 匿名? 注册