PB数据窗口高级技巧大揭秘

需积分: 20 37 下载量 201 浏览量 更新于2024-09-11 收藏 44KB TXT 举报
"这些技巧主要涉及PowerBuilder (PB) 中的数据窗口(Data Window)操作,包括显示图片、选择数据复制、图形数据处理、颜色设置、过滤与排序、格式调整等多个方面。" 在PowerBuilder中,数据窗口是用于展示和操作数据库中的数据的主要控件。以下是对标题和描述中所提及的一些关键知识点的详细解释: 1. **显示列图片**: 可以通过设置`ColumnDisplayAsPicture`属性为`true`,让数据窗口的某一列显示为图片。 2. **选择网格数据**: 可以获取用户在数据窗口中选择的行数据,例如`ls_selected=dw_1.Object.DataWindow.Selected.Data`,然后使用剪贴板函数`clipboard(ls_selected)`将数据复制到剪贴板。 3. **复制图形数据**: `dw_1.clipboard("gr_1")`这行代码可以将数据窗口中的图形数据复制到剪贴板,便于进一步使用。 4. **改变列颜色**: `DWeditsource`方法可以修改数据窗口列的颜色,如设置列的背景色或文字颜色。 5. **调整网格行样式**: `DWeditsource`方法配合`processing`参数可以控制数据窗口的处理模式,例如设置行的奇偶颜色,`processing=11`表示进入绘图模式,`0`则表示退出。 6. **条件性合并列**: 要合并两个或更多列,可以通过修改`EditSource`来实现,根据特定条件决定是否显示A列或B列。 7. **设置Grid数据窗口的边框**: 使用`TextHeaderBand`的`foreground`属性和`EditSource`设置文本宽度,以创建自定义边框。 8. **根据值过滤数据**: `setfilter`和`filter`方法可以动态地根据指定值过滤数据窗口中的数据,例如根据`column_name`列的显示值进行过滤。 9. **设置数据窗口的默认排序**: `primary.current`属性可以设置数据窗口的默认排序,`setnull(ls_temp)`确保没有默认排序。 10. **交替行颜色和高亮当前行**: `detailcolor`属性可以设置细节段的颜色,通过`mod(getrow(),2)`判断奇偶行,`current()`则用来判断当前行,从而实现不同颜色的行效果。 11. **获取数据窗口对象属性**: `__get_attribute`方法用于获取数据窗口对象的内部属性,例如`ldwo_use=dw_1.Object`和`ldwo_abc=ldwo_use.__get_attribute`,可以用于深入操作数据窗口的属性。 以上技巧展示了PowerBuilder数据窗口的强大功能和灵活性,可以帮助开发者更有效地实现各种数据展示和交互需求。这些技巧涵盖了数据窗口的基本操作,如数据处理、界面美化、用户交互等,对于提高PB应用程序的用户体验和开发效率具有重要作用。
2010-08-19 上传
当数据存在主次表时,当更新了次表数据后,主表数据在后台有更变时。可利用刷新主表当前行的方法重显主表数据。 /************************************************************ 函数名称: f_refresh_currentrow(adw) 功 能: 刷新DW当前行数据,不可刷新NO update or 带arguments的DW 参数说明: adw 目标DW 返 回 值: integer 成功返回1,失败返回-1 作 者: sean 创建时间: 2010年8月18日 ************************************************************/ string ls_dataobject string ls_keys[] //key Column Name string ls_dbname[] //key field Name string ls_coltype[] //field style string ls_tablenm //table name string ls_condition //sql Condition long ll_currentrow //Current Row numeric long ll_column //Column count integer i datawindow ldw datastore ldatastore ldw=adw if ldw.rowcount( )=0 then return -1 elseif trim(ldw.describe( "datawindow.table.arguments"))<>'?' then messagebox('','刷新数据窗口当前行失败!,数据窗口需要参数',exclamation!) return -1 else ll_currentrow=ldw.getrow( ) FOR ll_column = 1 TO long(ldw.object.datawindow.column.count)//key names If ldw.Describe("#"+string(ll_column)+".key") ='yes' Then i++ ls_keys[i]=ldw.Describe("#"+string(ll_column)+".name") ls_dbname[i]=ldw.Describe("#"+string(ll_column)+".dbname") ls_coltype[i]=ldw.Describe("#"+string(ll_column)+".coltype") End If NEXT if upperbound(ls_keys[])=0 then messagebox('','刷新数据窗口当前行失败!,没有主键',exclamation!) return -1 else ls_tablenm=left(ls_dbname[1],pos(ls_dbname[1],'.') -1) //table name for i=1 to upperbound(ls_keys[]) if pos('numb,deci,long,',LeftA(ls_coltype[i],4) +',')>0 then ls_condition+="and "+ls_dbname[i]+"="+string(f_getitem(ldw,ll_currentrow,ls_keys[i])) else ls_condition+="and "+ls_dbname[i]+"='"+string(f_getitem(ldw,ll_currentrow,ls_keys[i]))+"'" end if next ls_condition=mid(ls_condition,4) //sql Condition ldatastore=create datastore ldatastore.dataobject=ldw.dataobject ldatastore.settransobject( sqlca) if f_addwhere_retrieve(ldatastore,ls_condition)=1 then if ldatastore.rowcount( )=1 then ldw.object.data[ll_currentrow]=ldatastore.object.data[1] ldw.setitemstatus( ll_currentrow, 0, primary!, NotModified!) //if ldw.getrow( )<>ll_currentrow then ldw.scrolltorow( ll_currentrow) end if else messagebox('','刷新数据窗口当前行失败!,条件语法错误',exclamation!) return -1 end if destroy ldatastore end if end if