祝愿大家身体健康!

 站点注册  找回密码
 站点注册

QQ登录

只需一步,快速开始

查看: 7101|回复: 6

[参考资料] 数据窗口技巧

[复制链接]

[参考资料] 数据窗口技巧

[复制链接]
ehxz

主题

0

回帖

57万

积分

管理员

积分
571384
贡献
在线时间
小时
2015-5-7 23:02:57 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?站点注册

×
  1. 1、如何让存储文件目录的列,显示图片?

  2. 答:选择对应的column的display as picture属性为true

  3. 2、如何复制grid类型的所选择的行的数据到系统剪切板?

  4. 答:string ls_selected

  5. ls_selected=dw_1.Object.DataWindow.Selected.Data

  6. clipbord(ls_selected)

  7. 4、如何设置的DW底色?

  8. 在DW的editsource中改变color的值

  9. 5、如何将Grid风格改成自由格式?

  10. 在DW的editsource中将processing=1的1改为0

  11. 6、要新建一个表A但风格和现有表格B风格一样,怎么将A表快速设置成表B风格?

  12. 复制B表C,在C表的DW中的editsource中将表名和字段名改成A表的,即可

  13. 7、如何实现gird风格的datawindow的多栏表头?

  14. 答:添加 text到header带区,并设置band属性为foreground保存,edit source 修改text的x和width属性表达式如下:

  15. x="100~t integer(describe('firstcol.x')" width="100~tinteger(describe('lastcol.x')) - integer(describe('firstcol.x')) +integer(describe('lastcol.width'))

  16. 8、如何过滤dddw编辑风格的显示值为指定值的记录?

  17. 答:dw_1.setfilter("lookupdisplay('column_name')='"+ls_display_value_your+"'")

  18. dw_1.filter()

  19. 9、如何设置datawindow的某一列为空?

  20. 答:string ls_temp[]

  21. setnull(ls_temp)

  22. dw_1.o b j e c t.columnname.primary.current=ls_temp

  23. 10、如何设置datawindow的单双行不同颜色间隔?
  24. 答:在detail带区的color属性表达式中写上if(mod (getrow(),2)=1 ,rgb(255,0,0),rgb(0,255,0)),如果是当前行以第三种颜色表示,表达式如下:if(getrow()=current(), rgb(255,0,0),if(mod(getrow(),2)=1 ,rgb(0,0,255),rgb(0,255,0)))

  25. 11、如何获取指定名称的datawindowo b j e c t?
  26. 答:DWObject ldwo_use,ldwo_abc ldwo_use = dw_1.Object ldwo_abc = ldwo_use.__get_attribute("t_1",FALSE)//t_1为datawindow中text对象的名称

  27. 12、如何缩放datawindow的打印大小?
  28. 答:dw_1.o b j e c t.datawindow.zoom=150 or dw_1.o b j e c t.datawindow.zoom=75

  29. 13、如何在已过滤后的数据基础上对datawindow进行过滤?
  30. 答:dw_1.setfilter(dw_1.describe("datawindow.table.filter")+your_join+your_new_filter)
  31. dw_1.filter()

  32. 14、如何在datawindow中显示动态时间?
  33. 答:建立一个计算域,表达式为string(datetime(today(),now()),'yyyy年mm月dd日 hh点mm分ss秒'),同时设置datawindow的属性dw_1.Object.DataWindow.Timer_Interval=500

  34. 15、如何让带用title bar的datawindow控件的标题栏诚活动窗口的颜色?
  35. 答:外部函数定义:
  36. funcation logn SetActiveWindow(long hwnd ) Library "user32.dll"
  37. datawindow控件的clicked事件代码:
  38. setactivewindow(handle(this))

  39. 16、如何设置datawindow的当前行指示图标?
  40. 答:在datawindow中建立一个计算列,expression为'',并将该计算列移动为datawindow的第一个列,在datawindow控件的
  41. rowfocuschanged事件中写入代码:
  42. SetRowFocusIndicator(hand!)或setrowfucsindicator(p_1)//p_1为窗口上的picture控件名

  43. 17、如何通过代码打开dddw?
  44. 答:定义外部函数引用声明
  45. SUBROUTINE keybd_event( int bVk, int bScan, int dwFlags, int dwExtraInfo) LIBRARY "user32.dll"
  46. 代码如下: [constant integer VK_F4 = 115
  47. dw_1.SetFocus()
  48. dw_1.SetColumn( "dept_head_id" ) //设置当前dddw
  49. keybd_event( VK_F4,0,0,0 ) // 按下F4键
  50. keybd_event( VK_F4,0,2,0 ) // 释放F4键

  51. 18、如何打印datawindow的内容到文件中?
  52. 答: dw_1.o b j e c t.datawindow.print.fileName ="c:\temp.prn"
  53. dw_1.print()

  54. 19、如何设置dddw的初始值?
  55. 答:dw_1.o b j e c t.columnname.Initial="your_initial_value"

  56. 20、如何只显示不同的数据?
  57. 答:dw_1.filter("isnull(columnname[-1]) and columnname<>columnname[-1]")
  58. dw_1.filter()

  59. 21、如何让带有title bar的datawindow不可以移动?
  60. 答:在datawindow的自定义事件ue_nchittest(pbm_nchittest)中写入如下代码:
  61. return 1

  62. 22、如何在N-UP显示风格中建立基于第N栏中的列的计算列?
  63. 答:如column有两列,number和price ,并显示为两栏,则第一栏的cost计算列的expression为number*price,第二栏的cost_1计算列的expression为number[1]*price[1]

  64. 23、如何清空ddlb或edit.codetable中项目?
  65. 答:dw_1.Object.columnname.Values=""

  66. 24、如何实现指定的column的字体旋转90度?
  67. 答:dw_1.o b j e c t.columnname.font.Escapement ="900"

  68. 25、如何获取datawindow的sql代码?
  69. 答: 可以通过以下四种方法获取sql代码:
  70. string szselect
  71. szselect=dw_1.describe("datawindow.table.select")
  72. szselect=dw_1.describe("datawindow.table.sqlselect")
  73. szselect=dw_1.describe("datawindow.table.select.attribute")
  74. szselect=dw_1.getsqlselect()

  75. 27、如何获取datawindow对象占有的虚拟存储的容量?
  76. 答:使用datawindow.storage属性
  77. 举例:在datawindow控件的retrieverow事件中,写如如下代码:
  78. long lstorage
  79. lstorage=long(dw_1.o b j e c t.datawindow.storage)
  80. if lstorage>50000 then dbcancel()

  81. 28、如何连续在同一张纸打印两个数据窗口?
  82. 答:dw_1.o b j e c t.datawindow.print.filename="temp.prn"
  83. dw_2.o b j e c t.datawindow.print.filename="temp.prn"
  84. dw_1.print()
  85. dw_2.print()

  86. 29、如何设置datawindow分组后每个分组中的记录号?
  87. 答:建立一个计算列,expression为 getrow() - first(getrow() for group 1)+1

  88. 30、如何实现在datawindow中只有新增的行,才可以编辑?
  89. 答:在所有的column的protect属性表达式中写入以下表达式:
  90. if(isrownew(),'0','1')

  91. 31、除了循环以外,有没有更好的方法统计数据窗口中处于选中状态的行数?
  92. 一般习惯于使用循环来统计数据窗口中处于选中状态的行数,有没有更好的方法?其实此问题在应用上用处不大,讨论一下,活跃一下思维还是有好处的。
  93. 方法一: long ll_Selected ll_Selected = long(dw_1.describe("evaluate('sum( if(IsSelected(), 1, 0) for all)',1)"))
  94. 方法二: long ll_Selected ll_Selected = long(dw_1.describe("evaluate('count(IsSelected() for all)',1)"))
  95. 方法三:upperbound(dw_1.Object.Data.Selected)

  96. 32、问:怎么让PB只打印当前记录,是用Free格式制作的数据窗口!
  97. ---------------------------------------------------------------
  98. 答:
  99. DataStore ldt_temp
  100. long ll_Row , ll_Rows
  101. ll_Rows = dw_XX.Rowcount()
  102. If ll_Rows = 0 Then GoTo the_end
  103. If ll_Rows = 1 Then
  104. dw_XX.Print()
  105. GoTo the_end
  106. End if
  107. dw_XX.SetRedraw(False)
  108. ldt_temp = Create DataStore
  109. ldt_temp.DataObject = dw_XX.DataObject
  110. ll_Row = dw_XX.GetRow()
  111. dw_XX.RowsMove(1 , ll_Rows , Primary! , ldt_temp , 1 , Primary!)
  112. ldt_temp.RowsMove(ll_Row , ll_Row , Primary! , dw_XX , 1 , Primary!)
  113. dw_XX.Print()
  114. dw_XX.RowsMove(1 , 1 , Primary! , ldt_temp , ll_Row , Primary!)
  115. ldt_temp.RowsMove(1 , ll_Rows , Primary! , dw_XX , 1 , Primary!)
  116. Destroy ldt_temp
  117. dw_XX.SetRedraw(True)
  118. the_end:
  119. // 只用将上述脚本拷入到打印部分即可,dw_XX为被打印的free型数据窗口,该方法可保证dw_XX中的数据在打印前后包括sort等属性均不发生任何改变,但效率较低,不宜用在数据量太大的数据窗口中,当然,考虑到打印本身速度就比较慢,所以3000行数据是可以采用这种方法并让用户接受的。若在同一窗口上存在与dw_XX共享的grid数据窗口并且与dw_XX同时显示,则需要与dw_one一起SetRedraw()

  120. 38、字段如何自动换行的同时且自动高度?
  121. 答:将数据窗口中相应列的auto horz scroll 为不选中,选中autosize height 将detail的autosize height选中。在数据窗口retrieve 后调用下面函数即可 uf_set_text(datawindow adw_content,string as_columns,boolean,ab_ignoreblank) /************************************************************* describe: 在数据窗口adw_content中,在as_columns中包含的列中插入空格 args: as_columns 要操作的多个列,列间用逗号隔开 *************************************************************/ if (not isvalid(adw_content)) or isnull(as_columns) or len(as_columns)<1 or isnull(ab_ignoreblank) then return -1 n_cst_string lnv_string string ls_column[] , ls_width ,as_source,as_replaced ,ls_temp int li_upperbound , li_width , li_column , li_fontWidth, li_counter long ll_rowcount , ll_row , ll_totalstep int li_yield lnv_string.of_parsetoarray(as_columns,',',ls_column) li_upperbound = upperbound(ls_column) ll_rowcount = adw_content.rowcount() if li_upperbound<1 or ll_rowcount<1 then return -1 openwithparm(w_waiting,this) ib_cancel = false iw_frame.enabled = false ll_totalstep = ll_rowcount * li_upperbound w_waiting.uf_register(ll_totalstep) for li_column = 1 to li_upperbound ls_width = adw_content.describe(ls_column[li_column]+".width") li_width = integer(ls_width) if ls_width='!' or ls_width='?' or li_width=0 then continue end if //ls_temp = adw_content.describe(ls_column[li_column]+".Font.property { = 'width' }") //messagebox(ls_column[li_column]+".Font.property { = 'width' }",ls_temp) //return 1 li_fontwidth = 27 li_counter = li_width / li_fontWidth for ll_row=1 to ll_rowcount if ib_cancel then iw_frame.enabled = true return 0 //pressed cancel button end if as_source = adw_content.getitemstring(ll_row,ls_column[li_column]) as_replaced = uf_insertstring(as_source,li_counter,' ',false) if as_replaced<>as_source then adw_content.setitem(ll_row,ls_column[li_column],as_replaced) end if w_waiting.uf_stepit() next next close(w_waiting) iw_frame.enabled = true return 1

  122. 39、如何使dw的列不可移动,不可调整列宽?
  123. 答:在datawindow的cilcked事件写 if row=0 then return 1 end if

  124. 40.光标跳转到数据窗口的某一行某一列
  125. dw_1.scrolltorow(ll_row) dw_1.setcolumn(ll_column)

  126. 41 如何使光标指向每页第一行?
  127. long ll_firstrowonpage=long(dw_1.describe("datawindow.firstrowonpage"))
  128. dw_1.scrolltorow(ll_firstrowonpage)
  129. dw_1.setrow(ll_firstrowonpage)

  130. 42. Grid的窗口如何使第一列固定不动?
  131. ①选上data OBJECT的HSplitScroll属性 ②在constructor事件中: dw_1.Object.DataWindow.HorizontalScrollSplit=integer(dw_1.describe("#1.width")) //第一列的宽度 ③在scrollhorizontal事件中: int i
  132. if pane = 1 then
  133. i = integer(this.OBJECT.datawindow.horizontalscrollposition2)
  134. if i < 1 or isnull(i) then return
  135. if scrollpos > 0 then
  136. this.OBJECT.datawindow.horizontalScrollPosition = 0
  137. end if
  138. else
  139. i = integer(this.Object.DataWindow.HorizontalScrollSplit)
  140. if i < 1 or isnull(i) then return
  141. if i > scrollpos then
  142. this.OBJECT.datawindow.horizontalScrollPosition2 = i
  143. end if
  144. end if

  145. 43:如何禁止修改grid数据窗口列宽度
  146. 答:在Grid数据窗口的Clicked事件中加入:
  147.           If row = 0 Then return 1

  148. 44:grid数据窗口改变列宽度事件:
  149. event:pbm_lbuttondown,pbm_mousemvoe,pbm_lbuttonup
  150. 如果:
  151. pbm_lbuttondown: 在数据窗口标题栏(getrow() = 0 and GetObjectAtPointer =你的标题)按下鼠标左键,记一个标志;
  152. pbm_mousemvoe: 鼠标移动了,在记一个标志;
  153. pbm_lbuttonup: 这时鼠标左键up,再判断最后一列的位置是否发生变化,如果有,写你的脚本。

  154. 45:如何判断数据窗口内容是否修改
  155. if dw_wh.deletedcount() + dw_wh.modifiedcount() > 0 then
  156. integer li_ret
  157. li_ret = messagebox("注意","数据已经被修改,是否存盘?",Question!,YesNoCancel!)

  158. 46:如何得到数据窗口鼠标光标下的控件和行
  159.      建立一个自定义事件,事件号pbm_dwnmousemove,     事件有参数row、dwo

  160. 47:如何改变GRID数据窗口列位置(新手常见)
  161. 先preview,然后在预览窗口拖动位置即可。

  162. 070411更新

  163. 48:数据窗口循环删除行,必须要从最后一行开始删除,如
  164. for ll_row =dw_1.rowcount() to 1 step -1
  165. //if 删除条件 then
  166. dw_1.deleterow(ll_row)
  167. next
  168. 当然,也可以用do while 加上 find函数实现
复制代码
数据窗口技巧.txt (10.11 KB, 下载次数: 36)
共享共进共赢Sharing And Win-win Results
SYBASEBBS - 免责申明1、欢迎访问“SYBASEBBS.COM”,本文内容及相关资源来源于网络,版权归版权方所有!本站原创内容版权归本站所有,请勿转载!
2、本文内容仅代表作者观点,不代表本站立场,作者自负,本站资源仅供学习研究,请勿非法使用,否则后果自负!请下载后24小时内删除!
3、本文内容,包括但不限于源码、文字、图片等,仅供参考。本站不对其安全性,正确性等作出保证。但本站会尽量审核会员发表的内容。
4、如本帖侵犯到任何版权问题,请立即告知本站 ,本站将及时删除并致以最深的歉意!客服邮箱:admin@sybasebbs.com
fuxiaoyang13

主题

0

回帖

3136

积分

论坛元老

积分
3136
贡献
在线时间
小时
2015-5-8 17:40:27 | 显示全部楼层
多谢分享!!!!!!
共享共进共赢Sharing And Win-win Results
rbrjgzs

主题

0

回帖

2630

积分

金牌会员

积分
2630
贡献
在线时间
小时
2016-6-3 14:43:31 | 显示全部楼层
不错,挺实用
共享共进共赢Sharing And Win-win Results
rbrjgzs

主题

0

回帖

2630

积分

金牌会员

积分
2630
贡献
在线时间
小时
2016-6-6 18:53:57 | 显示全部楼层
挺实用,多谢分享
共享共进共赢Sharing And Win-win Results
rbrjgzs

主题

0

回帖

2630

积分

金牌会员

积分
2630
贡献
在线时间
小时
2016-6-6 18:54:14 | 显示全部楼层
挺实用,多谢分享
共享共进共赢Sharing And Win-win Results
rbrjgzs

主题

0

回帖

2630

积分

金牌会员

积分
2630
贡献
在线时间
小时
2016-6-7 21:52:01 | 显示全部楼层
初级菜鸟,多学习
共享共进共赢Sharing And Win-win Results
xiaosen666m

主题

0

回帖

408

积分

中级会员

积分
408
贡献
在线时间
小时
2016-7-11 07:14:42 | 显示全部楼层
不错~~~~~~~~~~~~~~~~~·
共享共进共赢Sharing And Win-win Results
您需要登录后才可以回帖 登录 | 站点注册

本版积分规则

免责声明:
本站所发布的一切破解补丁、注册机和注册信息及软件的解密分析文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:Admin@SybaseBbs.com

QQ|Archiver|PowerBuilder(PB)BBS社区 ( 鲁ICP备2021027222号-1 )

GMT+8, 2024-5-5 21:12 , Processed in 0.122418 second(s), 11 queries , MemCached On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表