数据窗口常用技巧.docx

上传人:b****5 文档编号:6406544 上传时间:2023-01-06 格式:DOCX 页数:13 大小:23.87KB
下载 相关 举报
数据窗口常用技巧.docx_第1页
第1页 / 共13页
数据窗口常用技巧.docx_第2页
第2页 / 共13页
数据窗口常用技巧.docx_第3页
第3页 / 共13页
数据窗口常用技巧.docx_第4页
第4页 / 共13页
数据窗口常用技巧.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

数据窗口常用技巧.docx

《数据窗口常用技巧.docx》由会员分享,可在线阅读,更多相关《数据窗口常用技巧.docx(13页珍藏版)》请在冰豆网上搜索。

数据窗口常用技巧.docx

数据窗口常用技巧

数据窗口常用技巧

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

答:

选择对应的column的displayaspicture属性为true

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

答:

stringls_selected

ls_selected=dw_1.Object.DataWindow.Selected.Data

clipbord(ls_selected)

4、如何设置的DW底色?

在DW的editsource中改变color的值

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

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

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

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

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

答:

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

x="100~tinteger(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的某一列为空?

答:

stringls_temp[]

setnull(ls_temp)

dw_1.object.columnname.primary.current=ls_temp

10、如何设置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、如何获取指定名称的datawindowobject?

答:

DWObjectldwo_use,ldwo_abcldwo_use=dw_1.Objectldwo_abc=ldwo_use.__get_attribute("t_1",FALSE)//t_1为datawindow中text对象的名称

12、如何缩放datawindow的打印大小?

答:

dw_1.object.datawindow.zoom=150ordw_1.object.datawindow.zoom=75

13、如何在已过滤后的数据基础上对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=500

15、如何让带用titlebar的datawindow控件的标题栏诚活动窗口的颜色?

答:

外部函数定义:

funcationlognSetActiveWindow(longhwnd)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?

答:

定义外部函数引用声明

SUBROUTINEkeybd_event(intbVk,intbScan,intdwFlags,intdwExtraInfo)LIBRARY"user32.dll"

代码如下:

[constantintegerVK_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.object.datawindow.print.fileName="c:

\temp.prn"

dw_1.print()

19、如何设置dddw的初始值?

答:

dw_1.object.columnname.Initial="your_initial_value"

20、如何只显示不同的数据?

答:

dw_1.filter("isnull(columnname[-1])andcolumnname<>columnname[-1]")

dw_1.filter()

21、如何让带有titlebar的datawindow不可以移动?

答:

在datawindow的自定义事件ue_nchittest(pbm_nchittest)中写入如下代码:

return1

22、如何在N-UP显示风格中建立基于第N栏中的列的计算列?

答:

如column有两列,number和price,并显示为两栏,则第一栏的cost计算列的expression为number*price,第二栏的cost_1计算列的expression为number[1]*price[1]

23、如何清空ddlb或edit.codetable中项目?

答:

dw_1.Object.columnname.Values=""

24、如何实现指定的column的字体旋转90度?

答:

dw_1.object.columnname.font.Escapement="900"

25、如何获取datawindow的sql代码?

答:

可以通过以下四种方法获取sql代码:

stringszselect

szselect=dw_1.describe("datawindow.table.select")

szselect=dw_1.describe("datawindow.table.sqlselect")

szselect=dw_1.describe("datawindow.table.select.attribute")

szselect=dw_1.getsqlselect()

27、如何获取datawindow对象占有的虚拟存储的容量?

答:

使用datawindow.storage属性

举例:

在datawindow控件的retrieverow事件中,写如如下代码:

longlstorage

lstorage=long(dw_1.object.datawindow.storage)

iflstorage>50000thendbcancel()

28、如何连续在同一张纸打印两个数据窗口?

答:

dw_1.object.datawindow.print.filename="temp.prn"

dw_2.object.datawindow.print.filename="temp.prn"

dw_1.print()

dw_2.print()

29、如何设置datawindow分组后每个分组中的记录号?

答:

建立一个计算列,expression为getrow()-first(getrow()forgroup1)+1

30、如何实现在datawindow中只有新增的行,才可以编辑?

答:

在所有的column的protect属性表达式中写入以下表达式:

if(isrownew(),'0','1')

31、除了循环以外,有没有更好的方法统计数据窗口中处于选中状态的行数?

一般习惯于使用循环来统计数据窗口中处于选中状态的行数,有没有更好的方法?

其实此问题在应用上用处不大,讨论一下,活跃一下思维还是有好处的。

方法一:

longll_Selectedll_Selected=long(dw_1.describe("evaluate('sum(if(IsSelected(),1,0)forall)',1)"))

方法二:

longll_Selectedll_Selected=long(dw_1.describe("evaluate('count(IsSelected()forall)',1)"))

方法三:

upperbound(dw_1.Object.Data.Selected)

32、问:

怎么让PB只打印当前记录,是用Free格式制作的数据窗口!

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

答:

DataStoreldt_temp

longll_Row,ll_Rows

ll_Rows=dw_XX.Rowcount()

Ifll_Rows=0ThenGoTothe_end

Ifll_Rows=1Then

dw_XX.Print()

GoTothe_end

Endif

dw_XX.SetRedraw(False)

ldt_temp=CreateDataStore

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!

Destroyldt_temp

dw_XX.SetRedraw(True)

the_end:

//只用将上述脚本拷入到打印部分即可,dw_XX为被打印的free型数据窗口,该方法可保证dw_XX中的数据在打印前后包括sort等属性均不发生任何改变,但效率较低,不宜用在数据量太大的数据窗口中,当然,考虑到打印本身速度就比较慢,所以3000行数据是可以采用这种方法并让用户接受的。

若在同一窗口上存在与dw_XX共享的grid数据窗口并且与dw_XX同时显示,则需要与dw_one一起SetRedraw()

38、字段如何自动换行的同时且自动高度?

答:

将数据窗口中相应列的autohorzscroll为不选中,选中autosizeheight将detail的autosizeheight选中。

在数据窗口retrieve后调用下面函数即可uf_set_text(datawindowadw_content,stringas_columns,boolean,ab_ignoreblank)/*************************************************************describe:

在数据窗口adw_content中,在as_columns中包含的列中插入空格args:

as_columns要操作的多个列,列间用逗号隔开*************************************************************/if(notisvalid(adw_content))orisnull(as_columns)orlen(as_columns)<1orisnull(ab_ignoreblank)thenreturn-1n_cst_stringlnv_stringstringls_column[],ls_width,as_source,as_replaced,ls_tempintli_upperbound,li_width,li_column,li_fontWidth,li_counterlongll_rowcount,ll_row,ll_totalstepintli_yieldlnv_string.of_parsetoarray(as_columns,',',ls_column)li_upperbound=upperbound(ls_column)ll_rowcount=adw_content.rowcount()ifli_upperbound<1orll_rowcount<1thenreturn-1openwithparm(w_waiting,this)ib_cancel=falseiw_frame.enabled=falsell_totalstep=ll_rowcount*li_upperboundw_waiting.uf_register(ll_totalstep)forli_column=1toli_upperboundls_width=adw_content.describe(ls_column[li_column]+".width")li_width=integer(ls_width)ifls_width='!

'orls_width='?

'orli_width=0thencontinueendif//ls_temp=adw_content.describe(ls_column[li_column]+".Font.property{='width'}")//messagebox(ls_column[li_column]+".Font.property{='width'}",ls_temp)//return1li_fontwidth=27li_counter=li_width/li_fontWidthforll_row=1toll_rowcountifib_canceltheniw_frame.enabled=truereturn0//pressedcancelbuttonendifas_source=adw_content.getitemstring(ll_row,ls_column[li_column])as_replaced=uf_insertstring(as_source,li_counter,'',false)ifas_replaced<>as_sourcethenadw_content.setitem(ll_row,ls_column[li_column],as_replaced)endifw_waiting.uf_stepit()nextnextclose(w_waiting)iw_frame.enabled=truereturn1

39、如何使dw的列不可移动,不可调整列宽?

答:

在datawindow的cilcked事件写ifrow=0thenreturn1endif

40.光标跳转到数据窗口的某一行某一列

dw_1.scrolltorow(ll_row)dw_1.setcolumn(ll_column)

41如何使光标指向每页第一行?

longll_firstrowonpage=long(dw_1.describe("datawindow.firstrowonpage"))

dw_1.scrolltorow(ll_firstrowonpage)

dw_1.setrow(ll_firstrowonpage)

42.Grid的窗口如何使第一列固定不动?

①选上dataOBJECT的HSplitScroll属性②在constructor事件中:

dw_1.Object.DataWindow.HorizontalScrollSplit=integer(dw_1.describe("#1.width"))//第一列的宽度③在scrollhorizontal事件中:

inti

ifpane=1then

i=integer(this.OBJECT.datawindow.horizontalscrollposition2)

ifi<1orisnull(i)thenreturn

ifscrollpos>0then

this.OBJECT.datawindow.horizontalScrollPosition=0

endif

else

i=integer(this.Object.DataWindow.HorizontalScrollSplit)

ifi<1orisnull(i)thenreturn

ifi>scrollposthen

this.OBJECT.datawindow.horizontalScrollPosition2=i

endif

endif

43:

数据窗口中如何实现用左右箭头实现焦点切换(tab,shift+tab)在26楼

44:

如何禁止修改grid数据窗口列宽度

答:

在Grid数据窗口的Clicked事件中加入:

Ifrow=0Thenreturn1

45:

grid数据窗口改变列宽度事件:

event:

pbm_lbuttondown,pbm_mousemvoe,pbm_lbuttonup

如果:

pbm_lbuttondown:

在数据窗口标题栏(getrow()=0andGetObjectAtPointer=你的标题)按下鼠标左键,记一个标志;

pbm_mousemvoe:

鼠标移动了,在记一个标志;

pbm_lbuttonup:

这时鼠标左键up,再判断最后一列的位置是否发生变化,如果有,写你的脚本。

46:

如何判断数据窗口内容是否修改

ifdw_wh.deletedcount()+dw_wh.modifiedcount()>0then

integerli_ret

li_ret=messagebox("注意","数据已经被修改,是否存盘?

",Question!

YesNoCancel!

43-46技巧来自天新网

47:

如何得到数据窗口鼠标光标下的控件和行

建立一个自定义事件,事件号pbm_dwnmousemove,事件有参数row、dwo

48:

如何改变GRID数据窗口列位置(新手常见)

先preview,然后在预览窗口拖动位置即可。

070411更新

49:

数据窗口循环删除行,必须要从最后一行开始删除,如

forll_row=dw_1.rowcount()to1step-1

//if删除条件then

dw_1.deleterow(ll_row)

next

当然,也可以用dowhile加上find函数实现

本文来自CSDN博客,转载请标明出处:

1.RGB函数计算公式:

颜色值=(65536*Blue)+(256*Green)+(Red)

2.控件可拖动:

send(handle(this),274,61458,0)

3.如何用程序控制下拉子数据窗口的下拉和收起

用modify或者直接用dw_1.object.col1.dddw.showlist=true

4.检索参数有些不需要传入则传%.

5.如何屏蔽鼠标滚轮触发

在控件的other事件写

ifmessage.number=522thenreturn1

6.得到数据窗口的语法:

stringls_dwsyntax

ls_dwsyntax=dw_1.describe("datawindow.syntax")

7.得到数据窗口中各列及标题:

longll_count,i

stringls_value,ls_colname

ll_colnum=Long(dw_1.object.datawindow.column.count)

fori=1toll_colnum

//得到标题头的名字

ls_colname=dw_1.describe('#'+string(i)+".name")+"_t"

ls_value=dw_1.describe(ls_colname+".text")

next

8.在程序中动态设置初始值:

ex:

dw_contro.object.columnName.initial='xxxx'

9.如何在DataWindow的SQL语法中不使用SELECTDISTINCT实现删除重复的行

----起先对你要显示唯一值的列进行排序:

"cityA",然后增加如下过滤字符串:

"city<>city[-1]orGetRow()=1"

10.如何改变列的字体颜色,提醒用户此列已做修改

----在列的Color属性中,输入如下表达式IF(column_name<>column_name.Original,RGB(255,0,0),RGB(0,0,0))。

在这个条件中,如果此列已改变,则显示红色字体,否则显示黑色字体。

这个表达式主要用column_name<>column_name.Original比较当前列的值和原始列的值是否相同来达到判断的目的。

11.在数据窗口的clicked或doubleclicked事件中写上注释//可解决一些意外的bug!

12.如何屏蔽上下鍵触发

新建一个事件:

id为pbm_dwnkey

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1