w_publ_pageretr.srw 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566
  1. $PBExportHeader$w_publ_pageretr.srw
  2. $PBExportComments$翻页窗口
  3. forward
  4. global type w_publ_pageretr from w_publ_base
  5. end type
  6. type sle_usual_query from u_sleedit within w_publ_pageretr
  7. end type
  8. type cb_retrieveall from uo_imflatbutton within w_publ_pageretr
  9. end type
  10. type em_pagerowno from editmask within w_publ_pageretr
  11. end type
  12. type dw_pageretr from u_dw_rbtnfilter within w_publ_pageretr
  13. end type
  14. type st_1 from statictext within w_publ_pageretr
  15. end type
  16. type cb_nextpage from uo_imflatbutton within w_publ_pageretr
  17. end type
  18. end forward
  19. global type w_publ_pageretr from w_publ_base
  20. integer width = 3675
  21. integer height = 2892
  22. string title = "分页"
  23. event ue_usual_query_filt ( )
  24. event ue_usual_query_retr ( )
  25. event user_key ( )
  26. event retrieve_pageretr ( )
  27. event ue_page1 ( )
  28. event ue_page2 ( )
  29. event ue_page3 ( )
  30. event ue_page4 ( )
  31. sle_usual_query sle_usual_query
  32. cb_retrieveall cb_retrieveall
  33. em_pagerowno em_pagerowno
  34. dw_pageretr dw_pageretr
  35. st_1 st_1
  36. cb_nextpage cb_nextpage
  37. end type
  38. global w_publ_pageretr w_publ_pageretr
  39. type variables
  40. datastore ds_curquery //缓存查询条件
  41. String ori_oldselect //保存原始SELECT
  42. String ls_newselect //保存加入查询条件后的SELECT
  43. String pkcolumndbtname //PK列数据库中列名
  44. Long onepage_rowlmno = 100 //页行最大行数
  45. Boolean retrieve_all = FALSE //是否全部RETRIEVE(不分页)
  46. Int mode = 0
  47. //工作模式:0-编辑 1-带字符串参数预选择的选择/编辑
  48. Long arg_pkid //目标定位id //备用
  49. String arg_string_code //默认常用查询内容
  50. String OLD_TITLE = ''
  51. s_edit_index_tran s_tran //传递参数使用
  52. Int retrmode = 0 // 0 retrieve all;1 first page ;2 prior page;3 next page;4 last page
  53. Boolean if_sharedata = FALSE //是否接受share
  54. datastore ds_share //用于存放share的数据
  55. Boolean if_power_sendout = TRUE
  56. Boolean if_power_print = TRUE
  57. end variables
  58. forward prototypes
  59. public function integer wf_editindex_lockf ()
  60. public function integer wf_retrieveuc (datawindow arg_dw, string arg_newselect, integer arg_retrmode)
  61. public function string wf_get_pkcolumndbtname (datawindow arg_dw)
  62. end prototypes
  63. event ue_usual_query_filt();//string obj_expr=''
  64. //if trim(sle_usual_query.text)<>'' then
  65. // if pos(trim(sle_usual_query.text),'%')=0 then
  66. // obj_expr=obj_expr+'( inwarecode like "%'+trim(sle_usual_query.text)+'%" )'
  67. // else
  68. // obj_expr=obj_expr+'( inwarecode like "'+trim(sle_usual_query.text)+'" )'
  69. // end if
  70. //end if
  71. //
  72. //dw_pageretr.setfilter(obj_expr)
  73. //
  74. //dw_pageretr.setredraw(false)
  75. //dw_pageretr.filter()
  76. //if dw_pageretr.rowcount()>=1 then
  77. // dw_pageretr.selectrow(0,false)
  78. // dw_pageretr.selectrow(1,true)
  79. //end if
  80. //dw_pageretr.setredraw(true)
  81. end event
  82. event ue_usual_query_retr();//string ls_querystrpart=''
  83. //ls_newselect=lower(ori_oldselect)
  84. //if trim(sle_usual_query.text)<>'' then
  85. // if pos(trim(sle_usual_query.text),'%')=0 then
  86. // ls_querystrpart= ls_querystrpart + "(u_inware.inwarecode like '%"+trim(sle_usual_query.text)+"%')"
  87. // else
  88. // ls_querystrpart=ls_querystrpart + "(u_inware.inwarecode like '"+trim(sle_usual_query.text)+"')"
  89. // end if
  90. //
  91. // if pos(ls_newselect," where ") <> 0 then
  92. // ls_newselect=ls_newselect+" and ("+ls_querystrpart+')'
  93. // else
  94. // ls_newselect=ls_newselect+" where ("+ls_querystrpart+')'
  95. // end if
  96. //end if
  97. //wf_retrieveuc(dw_pageretr,ls_newselect,1)
  98. //this.triggerevent('retrieve_pageretr')
  99. //
  100. end event
  101. event user_key();IF KeyDown(KeyPageUp!) THEN
  102. IF NOT dw_edit_mode THEN THIS.TriggerEvent('ue_page3')
  103. ELSEIF KeyDown(KeyPageDown!) THEN
  104. IF NOT dw_edit_mode THEN THIS.TriggerEvent('ue_page2')
  105. END IF
  106. end event
  107. event retrieve_pageretr();Boolean cb_retrieveall_enabled,cb_nextpage_enabled
  108. Boolean cb_func_enabled,cb_retrieve_enabled
  109. cb_retrieveall_enabled = cb_retrieveall.Enabled
  110. cb_nextpage_enabled = cb_nextpage.Enabled
  111. cb_func_enabled = cb_func.Enabled
  112. cb_retrieveall.Enabled = FALSE
  113. cb_nextpage.Enabled = FALSE
  114. cb_func.Enabled = FALSE
  115. SetPointer(HourGlass!)
  116. dw_pageretr.Retrieve()
  117. IF dw_pageretr.RowCount() > 0 AND dw_pageretr.GetRow() = 0 THEN dw_pageretr.SetRow(1)
  118. SetPointer(Arrow!)
  119. cb_nextpage.Enabled = cb_nextpage_enabled
  120. cb_retrieveall.Enabled = cb_retrieveall_enabled
  121. cb_func.Enabled = cb_func_enabled
  122. end event
  123. event ue_page1();wf_retrieveuc(dw_pageretr,ls_newselect,1)
  124. THIS.TriggerEvent('RETRIEVE_pageretr')
  125. end event
  126. event ue_page2();wf_retrieveuc(dw_pageretr,ls_newselect,2)
  127. THIS.TriggerEvent('RETRIEVE_pageretr')
  128. end event
  129. event ue_page3();wf_retrieveuc(dw_pageretr,ls_newselect,3)
  130. THIS.TriggerEvent('RETRIEVE_pageretr')
  131. end event
  132. event ue_page4();wf_retrieveuc(dw_pageretr,ls_newselect,4)
  133. THIS.TriggerEvent('RETRIEVE_pageretr')
  134. end event
  135. public function integer wf_editindex_lockf ();//wf_editindex_lockf
  136. IF retrieve_all OR dw_edit_mode THEN
  137. cb_nextpage.Enabled = FALSE
  138. cb_retrieveall.Enabled = FALSE
  139. em_pagerowno.Enabled = FALSE
  140. ELSE
  141. cb_nextpage.Enabled = TRUE
  142. cb_retrieveall.Enabled = TRUE
  143. em_pagerowno.Enabled = TRUE
  144. END IF
  145. IF dw_edit_mode THEN
  146. sle_usual_query.Enabled = FALSE
  147. cb_func.Enabled = FALSE
  148. ELSE
  149. sle_usual_query.Enabled = TRUE
  150. cb_func.Enabled = TRUE
  151. END IF
  152. RETURN 1
  153. end function
  154. public function integer wf_retrieveuc (datawindow arg_dw, string arg_newselect, integer arg_retrmode);//====================================================================
  155. // Function: wf_retrieveuc()
  156. //--------------------------------------------------------------------
  157. // Description: 分页拼retr语句
  158. //--------------------------------------------------------------------
  159. // Arguments:
  160. // integer arg_retrmode: 0 retrieve all;1 first page ;2 prior page;3 next page;4 last page
  161. //--------------------------------------------------------------------
  162. // Returns: integer
  163. //--------------------------------------------------------------------
  164. // Author: yyx Date: 2003.10.17
  165. //--------------------------------------------------------------------
  166. // Modify History:
  167. //
  168. //====================================================================
  169. //取得当前的最大\最小ID
  170. //按上下翻页命令,拼接最新SELECT语句
  171. retrmode=arg_retrmode
  172. IF arg_retrmode=0 or retrieve_all THEN
  173. arg_dw.Modify("datawindow.table.select = ~"" + arg_newselect+ "~"")
  174. GOTO EXT
  175. END IF
  176. string cur_page_newselect,ls_pkcolname,LS_PAGE_ter=''
  177. cur_page_newselect=lower(trim(arg_newselect))
  178. LONG MAX_ID=0,MIN_ID=0,LS_I,ls_id
  179. ls_pkcolname=arg_dw.Describe("#1.name") //取得ID列名称
  180. if arg_retrmode<>1 then
  181. MAX_ID=0
  182. Min_ID=0
  183. FOR LS_I=1 TO arg_dw.ROWCOUNT()
  184. ls_id=arg_dw.GetItemNumber(ls_i, ls_pkcolname)
  185. if LS_I=1 then
  186. MAX_ID=ls_id
  187. Min_ID=ls_id
  188. end if
  189. if not isnull(ls_id) then
  190. if MAX_ID<ls_id then MAX_ID=ls_id
  191. if Min_ID>ls_id then Min_ID=ls_id
  192. end if
  193. NEXT
  194. FOR LS_I=1 TO arg_dw.FilteredCount()
  195. ls_id=arg_dw.GetItemNumber(ls_i, ls_pkcolname,filter!,true)
  196. if LS_I=1 and MAX_ID=0 and Min_ID=0 then
  197. MAX_ID=ls_id
  198. Min_ID=ls_id
  199. end if
  200. if not isnull(ls_id) then
  201. if MAX_ID<ls_id then MAX_ID=ls_id
  202. if Min_ID>ls_id then Min_ID=ls_id
  203. end if
  204. NEXT
  205. end if
  206. cur_page_newselect=trim(cur_page_newselect)
  207. IF not (retrieve_all or retrmode=0) then
  208. cur_page_newselect='select top '+string(onepage_rowlmno)+' '+mid( cur_page_newselect , 8)
  209. end if
  210. CHOOSE CASE arg_retrmode
  211. CASE 1 //第一页
  212. LS_PAGE_ter=''
  213. CASE 2 //上一页
  214. LS_PAGE_ter=pkcolumndbtname+'>'+STRING(MAX_ID)
  215. CASE 3 //下一页
  216. LS_PAGE_ter=pkcolumndbtname+'<'+STRING(Min_ID)
  217. CASE 4 //末页
  218. LS_PAGE_ter=''
  219. END CHOOSE
  220. IF TRIM(LS_PAGE_ter)<>'' THEN
  221. if Pos(cur_page_newselect," where ") <> 0 then
  222. cur_page_newselect=cur_page_newselect+" AND ("+LS_PAGE_ter+')'
  223. else
  224. cur_page_newselect=cur_page_newselect+" WHERE ("+LS_PAGE_ter+')'
  225. end if
  226. END IF
  227. IF arg_retrmode=2 or arg_retrmode=4 THEN
  228. cur_page_newselect=cur_page_newselect+' ORDER BY '+pkcolumndbtname
  229. ELSE
  230. cur_page_newselect=cur_page_newselect+' ORDER BY '+pkcolumndbtname+' DESC'
  231. END IF
  232. arg_dw.Modify("datawindow.table.select = ~"" + cur_page_newselect+ "~"")
  233. EXT:
  234. RETURN 1
  235. end function
  236. public function string wf_get_pkcolumndbtname (datawindow arg_dw);//====================================================================
  237. // Function: wf_get_pkcolumndbtname()
  238. //--------------------------------------------------------------------
  239. // Description: 取第一列为关键字
  240. //--------------------------------------------------------------------
  241. // Arguments:
  242. // value datawindow arg_dw
  243. //--------------------------------------------------------------------
  244. // Returns: string
  245. //--------------------------------------------------------------------
  246. // Author: yyx Date: 2003.10.22
  247. //--------------------------------------------------------------------
  248. // Modify History:
  249. //
  250. //====================================================================
  251. string ls_pkcolumndbtname,ls_str,tmp_oldselect
  252. long l_pos
  253. ls_pkcolumndbtname=arg_dw.Describe("#1.dbname")
  254. if pos(ls_pkcolumndbtname,'.')<=0 then
  255. tmp_oldselect=trim(arg_dw.Describe("DataWindow.Table.Select"))
  256. ls_str=mid(tmp_oldselect,8)
  257. if pos(ls_str,'.')>pos(ls_str,',') then
  258. goto ext
  259. else
  260. ls_pkcolumndbtname=left(ls_str,pos(ls_str,',') - 1)
  261. end if
  262. end if
  263. ext:
  264. return ls_pkcolumndbtname
  265. end function
  266. on w_publ_pageretr.create
  267. int iCurrent
  268. call super::create
  269. this.sle_usual_query=create sle_usual_query
  270. this.cb_retrieveall=create cb_retrieveall
  271. this.em_pagerowno=create em_pagerowno
  272. this.dw_pageretr=create dw_pageretr
  273. this.st_1=create st_1
  274. this.cb_nextpage=create cb_nextpage
  275. iCurrent=UpperBound(this.Control)
  276. this.Control[iCurrent+1]=this.sle_usual_query
  277. this.Control[iCurrent+2]=this.cb_retrieveall
  278. this.Control[iCurrent+3]=this.em_pagerowno
  279. this.Control[iCurrent+4]=this.dw_pageretr
  280. this.Control[iCurrent+5]=this.st_1
  281. this.Control[iCurrent+6]=this.cb_nextpage
  282. end on
  283. on w_publ_pageretr.destroy
  284. call super::destroy
  285. destroy(this.sle_usual_query)
  286. destroy(this.cb_retrieveall)
  287. destroy(this.em_pagerowno)
  288. destroy(this.dw_pageretr)
  289. destroy(this.st_1)
  290. destroy(this.cb_nextpage)
  291. end on
  292. event open;call super::open;OLD_TITLE = THIS.Title
  293. s_tran = Message.PowerObjectParm
  294. IF NOT IsNull(s_tran) THEN
  295. retrieve_all = s_tran.if_retrieve_all
  296. mode = s_tran.work_mode
  297. arg_pkid = s_tran.arg_pkid
  298. arg_string_code = s_tran.arg_string_code
  299. if_sharedata = s_tran.if_sharedata //是否应用sharedata,当retrieve_all=true是生效
  300. ds_share = s_tran.ds_share
  301. if_power_sendout = s_tran.if_sendout
  302. if_power_print = s_tran.if_print
  303. END IF
  304. dw_pageretr.RBUTTON_FILTER_USE = TRUE //右键查询功能开关
  305. dw_pageretr.titleclick_sort_use = TRUE //单击标题排序功能开关
  306. dw_pageretr.SetTransObject (sqlca)
  307. pkcolumndbtname = wf_get_pkcolumndbtname(dw_pageretr) //取第一列为关键字
  308. ori_oldselect = dw_pageretr.Describe("DataWindow.Table.Select")
  309. ls_newselect = ori_oldselect
  310. ds_curquery = CREATE DATASTORE
  311. ds_curquery.DataObject = 'd_extr_find'
  312. ds_curquery.SetTransObject (sqlca)
  313. wf_editindex_lockf()
  314. sle_usual_query.Text = Trim(arg_string_code)
  315. IF NOT retrieve_all THEN
  316. THIS.TriggerEvent("ue_usual_query_RETR") //修改ls_newselect,retrieve
  317. ELSE
  318. IF if_sharedata THEN
  319. ds_share.ShareData(dw_pageretr)
  320. ELSE
  321. wf_retrieveuc(dw_pageretr,ls_newselect,1)
  322. THIS.TriggerEvent('RETRIEVE_pageretr')
  323. END IF
  324. END IF
  325. IF retrieve_all THEN
  326. THIS.TriggerEvent("ue_usual_query_filt")
  327. END IF
  328. end event
  329. event ue_retr;call super::ue_retr;s_extrtriequery_tran s_dbdw
  330. s_dbdw.query_dw=dw_pageretr
  331. s_dbdw.ptn_ds=ds_curquery
  332. s_dbdw.query_oldselect=ori_oldselect
  333. string ls_select=''
  334. openwithparm(w_extr_query,s_dbdw)
  335. ls_select = message.stringparm
  336. if trim(ls_select)="" or isnull(ls_select) then
  337. return
  338. else
  339. ls_newselect=ls_select
  340. end if
  341. dw_pageretr.setredraw(false)
  342. wf_retrieveuc(dw_pageretr,ls_newselect,1)
  343. this.triggerevent('retrieve_pageretr')
  344. dw_pageretr.setredraw(true)
  345. end event
  346. type cb_func from w_publ_base`cb_func within w_publ_pageretr
  347. integer x = 731
  348. integer y = 4
  349. integer width = 165
  350. integer height = 84
  351. integer taborder = 30
  352. string text = "查询"
  353. end type
  354. type cb_exit from w_publ_base`cb_exit within w_publ_pageretr
  355. integer x = 3255
  356. integer y = 2144
  357. integer height = 92
  358. integer taborder = 20
  359. end type
  360. type sle_usual_query from u_sleedit within w_publ_pageretr
  361. integer x = 219
  362. integer y = 4
  363. integer height = 92
  364. end type
  365. event inputchanged;call super::inputchanged;IF retrieve_all THEN
  366. PARENT.TRIGGEREVENT("ue_usual_query_filt")
  367. END IF
  368. end event
  369. event keyup;call super::keyup;IF NOT dw_edit_mode THEN
  370. If Key = KeyDownArrow! Then //
  371. dw_pageretr.ScrollNextRow()
  372. End If
  373. If Key = KeyUPArrow! Then //
  374. dw_pageretr.ScrollPriorRow()
  375. End If
  376. END IF
  377. end event
  378. event modified;call super::modified;IF retrieve_all or retrmode=0 THEN
  379. PARENT.TRIGGEREVENT("ue_usual_query_filt")
  380. ELSE
  381. PARENT.TRIGGEREVENT("ue_usual_query_RETR")
  382. END IF
  383. end event
  384. type cb_retrieveall from uo_imflatbutton within w_publ_pageretr
  385. integer x = 1202
  386. integer width = 165
  387. integer height = 84
  388. integer taborder = 70
  389. string text = "首页"
  390. end type
  391. event clicked;call super::clicked;PARENT.TriggerEvent('ue_page1')
  392. end event
  393. type em_pagerowno from editmask within w_publ_pageretr
  394. integer x = 901
  395. integer width = 293
  396. integer height = 84
  397. integer taborder = 60
  398. integer textsize = -9
  399. integer weight = 400
  400. fontcharset fontcharset = gb2312charset!
  401. fontpitch fontpitch = variable!
  402. string facename = "宋体"
  403. long textcolor = 33554432
  404. string text = "1000"
  405. borderstyle borderstyle = stylelowered!
  406. string mask = "#####0"
  407. boolean spin = true
  408. end type
  409. event constructor;this.text=f_ProfileString (sys_empid,dw_pageretr.DATAOBJECT, "pagerowno",'100')
  410. onepage_rowlmno=long(this.text)
  411. end event
  412. event modified;IF LONG(THIS.TEXT)>0 THEN
  413. else
  414. THIS.TEXT='1'
  415. end if
  416. onepage_rowlmno=LONG(THIS.TEXT)
  417. f_SetProfileString (sys_empid,dw_pageretr.DATAOBJECT, "pagerowno", THIS.TEXT)
  418. end event
  419. type dw_pageretr from u_dw_rbtnfilter within w_publ_pageretr
  420. integer y = 104
  421. integer width = 1184
  422. integer height = 1984
  423. integer taborder = 40
  424. boolean titlebar = true
  425. boolean maxbox = true
  426. boolean hscrollbar = true
  427. boolean vscrollbar = true
  428. boolean resizable = true
  429. boolean border = false
  430. boolean hsplitscroll = true
  431. borderstyle borderstyle = styleraised!
  432. end type
  433. event clicked;call super::clicked;IF Not( dw_edit_mode OR row <= 0 ) THEN THIS.SetRow(row)
  434. end event
  435. event rowfocuschanged;call super::rowfocuschanged;IF dw_edit_mode THEN RETURN
  436. IF currentrow > 0 THEN
  437. THIS.SelectRow(0,FALSE)
  438. THIS.SelectRow(currentrow,TRUE)
  439. END IF
  440. end event
  441. event dwnkey;call super::dwnkey;parent.postevent('user_key')
  442. end event
  443. type st_1 from statictext within w_publ_pageretr
  444. integer x = 27
  445. integer y = 24
  446. integer width = 219
  447. integer height = 48
  448. integer textsize = -9
  449. integer weight = 400
  450. fontcharset fontcharset = gb2312charset!
  451. fontpitch fontpitch = variable!
  452. string facename = "宋体"
  453. long textcolor = 33554432
  454. long backcolor = 134217739
  455. string text = "编码含:"
  456. boolean focusrectangle = false
  457. end type
  458. type cb_nextpage from uo_imflatbutton within w_publ_pageretr
  459. integer x = 1367
  460. integer width = 110
  461. integer height = 84
  462. integer taborder = 80
  463. boolean bringtotop = true
  464. string text = "▼"
  465. end type
  466. event clicked;call super::clicked;m_Dfc_Control_PopupMenu dmPopupMenu
  467. string menustr
  468. menustr="Text=下页~tEvent=ue_page3"
  469. menustr = menustr + "|" + "Text=上页~tEvent=ue_page2"
  470. menustr = menustr + "|" + "Text=末页~tEvent=ue_page4"
  471. if len(trim(menustr))<>0 then
  472. dmPopupMenu = Create m_Dfc_Control_PopupMenu
  473. dmPopupMenu.mf_BuildMenu(This, menustr)
  474. dmPopupMenu.mf_PopMenu()
  475. Destroy dmPopupMenu
  476. end if
  477. end event