
数据窗口常用技巧.doc
12页数据窗口常用技巧 1、如何让存储文件目录的列,显示图片?答:选择对应的 column 的 display as picture 属性为 true2、如何复制 grid 类型的所选择的行的数据到系统剪切板?答:string ls_selectedls_selected=dw_1.Object.DataWindow.Selected.Dataclipbord(ls_selected)4、如何设置的 DW 底色?在 DW 的 editsource 中改变 color 的值5、如何将 Grid 风格改成自由格式?在 DW 的 editsource 中将 processing=1 的 1 改为 06、要新建一个表 A 但风格和现有表格 B 风格一样,怎么将 A 表快速设置成表 B 风格?复制 B 表 C,在 C 表的 DW 中的 editsource 中将表名和字段名改成 A 表的,即可7、如何实现 gird 风格的 datawindow 的多栏表头?答:添加 text 到 header 带区,并设置 band 属性为 foreground 保存,edit source 修改 text 的 x 和 width 属性表达式如下:x=“100~t integer(describe('firstcol.x')“ width=“100~tinteger(describe('lastcol.x')) - integer(describe('firstcol.x')) +integer(describe('lastcol.width'))8、如何过滤 dddw 编辑风格的显示值为指定值的记录?答:dw_1.setfilter(“lookupdisplay('column_name')='“+ls_display_value_your+“'“)dw_1.filter()9、如何设置 datawindow 的某一列为空?答:string ls_temp[]setnull(ls_temp)dw_1.o b j e c t.columnname.primary.current=ls_temp10、如何设置 datawindow 的单双行不同颜色间隔? 答:在 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)))11、如何获取指定名称的 datawindowo b j e c t? 答:DWObject ldwo_use,ldwo_abc ldwo_use = dw_1.Object ldwo_abc = ldwo_use.__get_attribute(“t_1“,FALSE)//t_1 为 datawindow 中 text 对象的名称12、如何缩放 datawindow 的打印大小? 答:dw_1.o b j e c t.datawindow.zoom=150 or dw_1.o b j e c t.datawindow.zoom=7513、如何在已过滤后的数据基础上对 datawindow 进行过滤? 答:dw_1.setfilter(dw_1.describe(“datawindow.table.filter“)+your_join+your_new_filter) dw_1.filter()14、如何在 datawindow 中显示动态时间? 答:建立一个计算域,表达式为 string(datetime(today(),now()),'yyyy 年 mm 月 dd 日 hh 点 mm 分 ss 秒'),同时设置 datawindow 的属性 dw_1.Object.DataWindow.Timer_Interval=50015、如何让带用 title bar 的 datawindow 控件的标题栏诚活动窗口的颜色? 答:外部函数定义: funcation logn SetActiveWindow(long hwnd ) Library “user32.dll“ datawindow 控件的 clicked 事件代码: setactivewindow(handle(this))16、如何设置 datawindow 的当前行指示图标? 答:在 datawindow 中建立一个计算列,expression 为'',并将该计算列移动为 datawindow 的第 一个列,在 datawindow 控件的 rowfocuschanged 事件中写入代码: SetRowFocusIndicator(hand!)或 setrowfucsindicator(p_1)//p_1 为窗口上的 picture 控件名17、如何通过代码打开 dddw? 答:定义外部函数引用声明 SUBROUTINE keybd_event( int bVk, int bScan, int dwFlags, int dwExtraInfo) LIBRARY “user32.dll“ 代码如下: [constant integer VK_F4 = 115 dw_1.SetFocus() dw_1.SetColumn( “dept_head_id“ ) //设置当前 dddw keybd_event( VK_F4,0,0,0 ) // 按下 F4 键 keybd_event( VK_F4,0,2,0 ) // 释放 F4 键18、如何打印 datawindow 的内容到文件中? 答: dw_1.o b j e c t.datawindow.print.fileName =“c:\temp.prn“ dw_1.print()19、如何设置 dddw 的初始值? 答:dw_1.o b j e c t.columnname.Initial=“your_initial_value“20、如何只显示不同的数据? 答:dw_1.filter(“isnull(columnname[-1]) and columnname50000 then dbcancel()28、如何连续在同一张纸打印两个数据窗口? 答:dw_1.o b j e c t.datawindow.print.filename=“temp.prn“ dw_2.o b j e c t.datawindow.print.filename=“temp.prn“dw_1.print() dw_2.print()29、如何设置 datawindow 分组后每个分组中的记录号? 答:建立一个计算列,expression 为 getrow() - first(getrow() for group 1)+130、如何实现在 datawindow 中只有新增的行,才可以编辑? 答:在所有的 column 的 protect 属性表达式中写入以下表达式: if(isrownew(),'0','1')31、除了循环以外,有没有更好的方法统计数据窗口中处于选中状态的行数? 一般习惯于使用循环来统计数据窗口中处于选中状态的行数,有没有更好的方法?其实此 问题在应用上用处不大,讨论一下,活跃一下思维还是有好处的。
方法一: long ll_Selected ll_Selected = long(dw_1.describe(“evaluate('sum( if(IsSelected(), 1, 0) for all)',1)“)) 方法二: long ll_Selected ll_Selected = long(dw_1.describe(“evaluate('count(IsSelected() for all) ',1)“)) 方法三:upperbound(dw_1.Object.Data.Selected)32、问:怎么让 PB 只打印当前记录,是用 Free 格式制作的数据窗口! --------------------------------------------------------------- 答: DataStore ldt_temp long ll_Row , ll_Rows ll_Rows = dw_XX.Rowcount() If ll_Rows = 0 Then GoTo the_end If ll_Rows = 1 Then dw_XX.Print() GoTo the_end End if dw_XX.SetRedraw(False) ldt_temp = Create DataStore ldt_temp.DataObject = dw_XX.DataObject ll_Row = dw_XX.GetRow() dw_XX.RowsMove(1 , ll_Rows , Primary! , ldt_temp , 1 , Primary!) ldt_temp.RowsMove(ll_Row , ll_Row , Primary! , dw_XX , 1 , Primary!) dw_XX.Print() dw_XX.RowsMove(1 , 1 , Primary! , ldt_temp , ll_Row , Primary!) ldt_temp.RowsMove(1 , ll_Rows , Primary! , dw_XX , 1 , Primary!) Destroy ldt_temp dw_XX.SetRedraw(True) the_end: // 只用将上述脚本拷入到打印部分即可,dw_XX 为被打印的 free 型数据窗口,该方法可保 证 dw_XX 中的数据在打印前后包括 sort 等属性均不发生任何改变,但效率较低,不宜用在数据量太大的数据窗口中,当然,考虑到打印本身速度就比较慢,所以 3000 行数据是可 以采用这种方法并让用户接受的。
若在同一窗口上存在与 dw_XX 共享的 grid 数据窗口并 且与 dw_XX 同时显示,则需要与 dw_one 一起 SetRedraw()38、字段如何自动换行的同时且自动高度? 答:将数据窗口中相应列的 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)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 139、如何使 dw 的列不可移动,不可调整列宽? 答:在 datawindow 的 cilcked 事件写 if。
