图学PowerBuilder---实现Datawindow多选的函数

本文介绍如何在 PowerBuilder 的 DataWindow 控件中实现多选功能,包括使用 CTRL 和 SHIFT 键进行连续或多行选择的具体实现方法。

先上一图看看效果

在PB的Datawindow中不似list等控件,默认不支持多选(CTRL、SHIFT)但可以通过代码来实现。下边就列出多选的实现方法。

补充说明:其它与其它开发工具中的选择行相比较而言,PB的Datawindow中的行默认情况下鼠标点选后,该行并没有选中,而是需要一个Boolean的变量标记行是否选中。

首先要在变量声明中定义如下变量:

代码放在这里,方便大家复制(呵呵)

[plain]  view plain copy print ?
  1. boolean ib_multiSelect = True  
  2. long il_lastRow=0  
  3. long il_firstRow=0  
  4. int ii_current_style = 0  
然后定义函数:

然后在函数体中加入如下实现代码:

[plain]  view plain copy print ?
  1. long lCr  
  2. int iStep  
  3. string ls_CurObj, ls_CurCol  
  4. integer li_LinePos  
  5.   
  6. if isnull(dw.dataobject) or len(string(dw.dataobject)) <= 0 then return  
  7. if row <> 0 then  
  8.     if (ib_multiSelect = True) then  
  9.         if KeyDown( KeyControl! ) then   
  10.             if dw.isSelected( Row ) = True then  
  11.                 dw.SelectRow( Row,False )  
  12.             else  
  13.                 dw.SelectRow( Row,True )  
  14.                 dw.SetRow( Row )  
  15.             end if  
  16.             il_FirstRow = Row  
  17.         else  
  18.             if KeyDown( KeyShift! ) then  
  19.                 dw.SelectRow( 0,False )  
  20.                 if Row > il_FirstRow then  
  21.                     for lCr = il_FirstRow to Row  
  22.                         if lCr>0 and lCr<=dw.Rowcount() then  
  23.                             dw.SelectRow( lCr,True )  
  24.                         end if  
  25.                     next  
  26.                 else  
  27.                     for lCr = il_FirstRow to Row Step -1  
  28.                         if lCr>0 and lCr<=dw.Rowcount() then  
  29.                             dw.SelectRow( lCr,True )  
  30.                         end if  
  31.                     next  
  32.                 end if  
  33.             else  
  34.                 dw.SelectRow( 0,False )  
  35.                 dw.SelectRow( Row,True )  
  36.                 dw.SetRow( Row )  
  37.                 il_FirstRow = Row  
  38.             end if  
  39.         end if    
  40.     else  
  41.         dw.SelectRow( 0,False )  
  42.         if ii_current_style = 0 then  
  43.             dw.SelectRow( Row,True )  
  44.         end if  
  45.         dw.SetRow( Row )  
  46.         il_FirstRow = Row  
  47.     end if  
  48. end if  

最后在Datawindow的Clicked中调用此方法即可:


-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

原来搜索了一个类似的方法,但有些问题,感谢秦哥提供了方法,在那之上调整了通用的Datawindow

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值