在PB中实现datawindow树形结构
PB树视图
树的遍历:函数TreeList(long handle)long ll_HandleTreeviewitem ltvi_Itemll_Handle = Tv_Tree.finditem(ChildTreeItem!,handle)do while ll_Handle <> -1Tv_Tree.Getitem(ll_Handle ,ltvi_Item)//根据ltvi_Item做相应的操作ltvi_Item即取出的节点,ltvi_Item.statepictureindex 节点状态,一般用来区分复选框ltvi_bel 节点标题ltvi_Item.data 节点创建时存放的数据TreeList(ll_Handle)ll_Handle = Tv_Tree.finditem(NextTreeItem!,ll_handle)looptreeviewname.ExpandItem ( itemhandle ) 树控件展开哪个节点treeviewname.ExpandAll ( itemhandle ) 树控件展开某个节点的所有子节点,一般用于根节点。
Treeviewname.finditem(firstviewvisibletreeitem,0) 这是获得可见树的第一个节点,一般用来,获取根节点,但是当节点过多时则根节点就会被隐藏,此时就不能得到根了,此时就要用到Treeviewname.selectitem(handle)Treeviewname.selectitem(handle) 当我们展开的节点多时,视觉就会移到下一页,此时用它则会将视觉焦点放到该节点。
treeviewname.InsertItemFirst ( handleparent, item ) 在父亲节点下插入第一个子节点。
treeviewname.SetItem ( itemhandle, item ) 它可以修改节点的属性,不是覆盖节点。
pb中datawindow常用技巧
pb中datawindow常用技巧一(2009-04-16 17:09:07)转载▼标签:分类:PowerBuilder杂谈pb中datawindow常用技巧一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.object.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、如何获取指定名称的datawindowobject?答: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.object.datawindow.zoom=150 or dw_1.object.datawindow.zoom=7513、如何在已过滤后的数据基础上对datawindow进行过滤?答:dw_1.setfilter(dw_1.describe("datawindow.table.filter")+your_join+you r_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 = 115dw_1.SetFocus()dw_1.SetColumn( "dept_head_id" ) //设置当前dddwkeybd_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]) and columnname<>columnname[-1]") dw_1.filter()21、如何让带有title bar的datawindow不可以移动?答:在datawindow的自定义事件ue_nchittest(pbm_nchittest)中写入如下代码:return 122、如何在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代码:string szselectszselect=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事件中,写如如下代码:long lstoragelstorage=long(dw_1.object.datawindow.storage)if lstorage>50000 then dbcancel()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() for group 1)+130、如何实现在datawindow中只有新增的行,才可以编辑?答:在所有的column的protect属性表达式中写入以下表达式:if(isrownew(),'0','1')31、除了循环以外,有没有更好的方法统计数据窗口中处于选中状态的行数?一般习惯于使用循环来统计数据窗口中处于选中状态的行数,有没有更好的方法?其实此问题在应用上用处不大,讨论一下,活跃一下思维还是有好处的。
PB 数据窗口高级( DataWindow)应用37个技巧
PB 数据窗口高级( DataWindow) 37个技巧1. 使DataWindow列只能追加不能修改如何使DataWindow中的数据只能追加新记录而不能修改,利用Column 的Protect 属性可以很方便的做到这一点,方法如下:将每一列的Protect 属性设置为:If( IsRowNew(), 0, 1) )在PowerScript 中可以动态修改Protect 属性:dw_1.Modify("column_name_here.Protect='1~tIf(IsRowNew(),0,1)'")这样,DataWindow 中只有新追加的记录可修改,而其他记录是只读的。
2 .如何在DataWindow中实现列的自动折行我们在PowerBuilder应用程序的开发过程中, 使用DataWindow时, 经常会遇到某列的数据太长, 不能同时全部显示的情况. 若采用自动水平滚动, 操作起来又不够简便. 下面介绍一种方法, 实现列数据多行显示, 即实现列数据的自动折行.具体步骤如下:1) 在DataWindow Painter中打开此DataWindow.2) 在需设定自动折行的列上双击鼠标, 弹开此列的属性窗口.3) 选择Position标签, 选中Autosize Height 多选框.4) 选择Edit标签, 不选中Auto Horz Scroll多选框.5) 单击OK按钮, 保存所做的修改.6) 点中Detail Band (即写有Detail的灰色长带), 单击鼠标右键, 选择Properties... 菜单项.7) 选中Autosize Height多选框.8) 单击OK按钮, 保存所做的修改.9) 保存此DataWindow.注意:连在一起的汉字(中间没有标点或空格分隔), 系统将认为是一个单词, 不会自动进行折行.3. 在数据窗口中实现动画要实现动画,必须要有定时器,在数据窗口中已经有了一个定时器,双击数据窗口将弹出的对话框,在Timer Interval中定义大于零的值就有定时器(可以精确到毫秒),有了这个定时器就可以实现动画了。
PB制作报表操作手册V1.0
PB制作手麻统计报表操作手册V1.01.原理跟制作文书单非常类似;但是有所区别,请谨记;2.PB制作手麻统计报表,需要制作2个DATAWINDOW,也即是制作2个单子;其中一个的表现形式采用原有的FREEFORM,另外一个的表现形式为GRID,分别制作2张单子,使用自定义查询参数进行联结;3.手麻统计报表的组成部分有4部分:详细会有截图进行阅览;a)左侧树形菜单列表;b)右侧上方查询条件;c)中间部分为固定交互按钮;d)主体下方为报表的实际数据展现区域;4.具体的操作步骤如下:设置数据库连接,跟文书单一样,不做解释;制作查询条件DATAWINDOW,新建一个PBL,然后点击【NEW】新建一个DATAWINDOW,在DATAWINDOW选项里面选择FREEFORM,点击确定,选择【SQL SELECT】,点击【NEXT】点击【CHANCEL】,点击【design】下拉菜单里面的【CONVERT TO SYNTAX】,转入到代码编辑模式,进行SQL代码的编写,见截图:截图里面的的模式下是SQL代码,AS后面的是查询条件,这个是根据用户要求来做查询条件,截图只是放入一个开始时间和结束时间;这个里面的begintime,endtime作为查询条件,进而跟第二个DATAWINDOW里面的参数进行联结;点击【RETURN】按钮,返回到界面模式,修改参数的名字,字段属性需要进行一定的修改,点击一个字段,选择右侧属性选项卡里面的【EDIT】,在【styletype】下拉选择【EditMask】风格,在MASK里面调整时间格式为:yyyy/mm/dd即可,在下方勾选一个日历操作选项【Drop-Down Calendar】,每做一步点击保存,保存名字自己自定义,调整好属性后,点击【Retrieve】,进行界面效果预览,如下图所示可以设置一系列的聚焦提示效果,提示文字以及聚焦显示手型图案,例如保存完之后,第一个DATAWINDOW已经完成;接下来制作第二个DATAWINDOW。
在PB的数据窗口中使用树视图表现层次型数据
在PB的数据窗口中使用树视图表现层次型数据
胡岩;王延青;付忠传
【期刊名称】《微处理机》
【年(卷),期】2000(000)002
【摘要】PowerBuilder是目前比较流行的广为使用的数据库前端开发工
具,DataWindow是其提供的最有特色的技术.本文介绍了在PowerBuilder的DataWindow中使用TreeView控件的一种方法.
【总页数】3页(P37-39)
【作者】胡岩;王延青;付忠传
【作者单位】哈尔滨工业大学网络中心,哈尔滨150001;哈尔滨工业大学网络中心,哈尔滨150001;哈尔滨工业大学网络中心,哈尔滨150001
【正文语种】中文
【中图分类】TP3
【相关文献】
1.PB数据窗口中的多选列表框及后台数据保存的处理技术 [J], 叶昌有
2.在PB的数据窗口中使用OLE列的方法 [J], 徐竹冰
3.在PB数据窗口中实现数据的灵活编程 [J], 田斌;付沈文
4.PB的数据窗口中字段间输入法自动切换的实现 [J], 张强
5.PB9数据窗口中实现输入法自动切换 [J], 姜勇
因版权原因,仅展示原文概要,查看原文内容请购买。
PB 数据窗口高级( DataWindow)应用37个技巧
PB 数据窗口高级( DataWindow) 37个技巧1. 使DataWindow列只能追加不能修改如何使DataWindow中的数据只能追加新记录而不能修改,利用Column 的Protect 属性可以很方便的做到这一点,方法如下:将每一列的Protect 属性设置为:If( IsRowNew(), 0, 1) )在PowerScript 中可以动态修改Protect 属性:dw_1.Modify("column_name_here.Protect='1~tIf(IsRowNew(),0,1)'")这样,DataWindow 中只有新追加的记录可修改,而其他记录是只读的。
2 .如何在DataWindow中实现列的自动折行我们在PowerBuilder应用程序的开发过程中, 使用DataWindow时, 经常会遇到某列的数据太长, 不能同时全部显示的情况. 若采用自动水平滚动, 操作起来又不够简便. 下面介绍一种方法, 实现列数据多行显示, 即实现列数据的自动折行.具体步骤如下:1) 在DataWindow Painter中打开此DataWindow.2) 在需设定自动折行的列上双击鼠标, 弹开此列的属性窗口.3) 选择Position标签, 选中Autosize Height 多选框.4) 选择Edit标签, 不选中Auto Horz Scroll多选框.5) 单击OK按钮, 保存所做的修改.6) 点中Detail Band (即写有Detail的灰色长带), 单击鼠标右键, 选择Properties... 菜单项.7) 选中Autosize Height多选框.8) 单击OK按钮, 保存所做的修改.9) 保存此DataWindow.注意:连在一起的汉字(中间没有标点或空格分隔), 系统将认为是一个单词, 不会自动进行折行.3. 在数据窗口中实现动画要实现动画,必须要有定时器,在数据窗口中已经有了一个定时器,双击数据窗口将弹出的对话框,在Timer Interval中定义大于零的值就有定时器(可以精确到毫秒),有了这个定时器就可以实现动画了。
PB复习题及答案
一:选择题1.关于Powerbuilder的标识符下列说法中正确的是(D)A . PB的标识符可以以数字开头B.PB中的标识符只能以数字开头C.PB的标识符只能以数字或者下划线开头D.PB中的标识符只能以英文字母或下划线开头2.在PB中提供了4种指示代词,其中指代菜单所挂靠的当前窗口的代词是(D)A ThisB SuperC ParentD parentwindow3.PB中循环语句一共有(C)种A.3 B. 4 C.5 D。
64.FOR hap=200 TO 2 Step -2------NEXT以上循环语句执行的次数为__B_次A.98 B.100 C.101 D.1985.在PB中默认的事物对象的名称是_B__A . SQLSA B.SQLCA C .SQLDA D.SQLCODE二.填空题1.创建PB应用程序时,会产生三个文件,一个是_工作区_文件,扩展名为.pbw ,一个是目标文件,扩展名为_.pbt_,一个是库文件,扩展名为_.pbl_.2.在PB10.5中窗口类型一共有_5_种(主窗口、子窗口、弹出式窗口、响应窗口、MDI窗口),其中MDI/MDIHelp类型的窗口必须设置菜单_正确_(正确/错误)。
3.在PowerScript语言中,强制退出循环体的语句是_exit_.4.数据窗口由_数据窗口控件_和_数据窗口对象_两部分组成。
5.在使用数据窗口中(DataWindow)时,使用DataWindow控件的_retrieve()_函数实现检索并显示数据,使用函数设置数据窗口的数据过滤条件。
6.PB中的续行符是_&_._isnull_函数用于判断变量是否为空值。
7.使用游标读取数据的四个过程是_定义游标_,打开游标,_拨动游标_,关闭游标。
8.PB中事务提交的命令是_commit_,事务撤销并回滚的命令是_rollback_;9.在PB中,通过_Insert Row()_函数(方法)向当前数据窗口dw_1插入一个新的空行,通过Delete Row()_函数(方法)删除当前数据窗口中的指定行,通过_Save Changes()_函数(方法)保存对数据窗口的更新。
pb 刷新dw数据的几种方法
pb 刷新dw数据的几种方法
在PowerBuilder中刷新DataWindow(DW)数据的几种方法如下:
1. 重新检索数据:重新执行检索数据的操作,例如使用DataWindow控件的Fetch或Refresh方法,从数据源重新获取数据并填充到DataWindow 中。
2. 手动刷新:使用DataWindow控件的Update或Refresh方法,根据需要手动触发刷新操作。
3. 自动刷新:设置DataWindow控件的AutoRefresh属性,在一定时间间隔内自动刷新数据。
4. 数据窗口对象更新:使用DataWindow对象的UpdateData方法,可以强制更新DataWindow中显示的数据。
5. 触发事件刷新:在某些情况下,可以使用DataWindow控件的事件触发刷新,例如RowChanged、RowInserted等事件,在事件处理程序中执行刷新操作。
这些方法可以根据具体情况选择使用,以实现DataWindow数据的实时更新和显示。
PB中TreeView控件使用技巧
PB中TreeView控件使用技巧一、应用TreeView 控件的一般步骤1、建立一个应用,并设好与数据库的接口,这是操作数据库的前提。
2、在应用中建一应用窗口W_1,在其上加入二个名为dw_3和dw_4的datawindow控制对象和一个名为TV_1的TreeView对象。
3、修改DW_3属性General:把Datawindow object name填写一个已存在的名为DW_date的datawindow(注意:它与datawindow控制对象是不同的),用于生成树视图项,将其Visible项设为不可见。
4、修改DW_4属性General:把Datawindow object name填写一个已存在的名为DW_TS的datawindow对象,用于显示查询出的具体内容。
5、编辑TV_1的属性TreeView的树视图项不能直接编辑,必须在Script中编写程序。
Picture:在Picture Name中加入四个不同的图标,用于代表树视图中的两个层次(一、二级)、两种状态(未选、选中)。
General:可根据具体应用设定是否选中,其中:Delete Items:运行中是否允许删除表项。
Disable PragDrog: 运行中是否允许拖放表项。
Edit Labels: 运行中是否允许单击表项来改变表项的标题。
Show Buttons:是否在表项放显示+-按钮,有示相对的扩展和收缩。
Hide Selection:当该控件失去焦点时,选中项是否以高亮度显示。
Show Line:表项间是否加一竖线。
Lines At Root:所有根层表项是否用竖线连接。
Indentation:子表项相对于父表项的向右缩进度。
6、编写TV_1的Script这里是TreeView控件的关键,也是难点。
二、TreeView 控件的信息构成及创建树视图项TreeViewItem是TreeView 控件的基本信息单位,树视图项的生成一般有二种方法,一种是先生成根层视图项,再在应用中动态生成下级视图项,另一种是把全部树视图项一次和成。
pb datawindowchild 用法
在PowerBuilder中,DataWindowChild(简称DWChild)是DataWindow对象的一部分,它表示DataWindow中的子数据窗口。
DataWindowChild允许在主数据窗口中嵌套其他数据窗口,从而创建更复杂的数据窗口布局。
下面是关于DataWindowChild的一些详细解答:1. 创建 DataWindowChild要创建DataWindowChild,首先确保已经在主数据窗口中创建了一个DataWindowChild对象。
可以通过以下步骤来完成:•打开 PowerBuilder IDE。
•在主数据窗口上右键单击,选择“Insert” > “DataWindowChild”。
•在弹出的对话框中,为DataWindowChild指定名称并点击“OK”。
2. 设置 DataWindowChild 的属性在创建DataWindowChild后,可以设置其属性。
一些重要的属性包括:•DataWindow 对象属性:在General选项卡中,指定子数据窗口使用的DataWindow对象。
这决定了子数据窗口的数据源。
•Presentation 属性:在General选项卡中,可以设置DataWindowChild的位置、大小等外观属性。
3. 在主 DataWindow 中使用 DataWindowChild要在主数据窗口中使用DataWindowChild,需要在主数据窗口的Detail或Summary区域添加一个子数据窗口控件。
以下是步骤:•在主数据窗口上右键单击,选择“Insert” > “Control”。
•在弹出的对话框中,选择DataWindowChild。
•将新创建的子数据窗口控件放置在主数据窗口的适当位置。
4. 编程控制 DataWindowChild可以通过PowerScript来编程控制DataWindowChild。
以下是一些常见的操作:•设置 DataWindowChild 的数据源:使用SetTransObject方法为DataWindowChild设置事务对象,然后使用Retrieve方法检索数据。
浅谈PB中动态DataWindow的技术应用
浅谈PB中动态DataWindow的技术应用在PowerBuilder的应用程序开发过程中,对数据库中数据进行操作的对象是数据窗口对象(DataWindow),利用数据窗口对象,我们可以十分方便地完成对数据库中已经存在的表中数据进行检索、查询、插入、删除和更新。
但是,在实际问题中,我们常常遇到数据库中的一些表是用户在程序运行期间动态生成的,若要对这样表中的数据进行操作,就要运用动态数据窗口对象,值得提到的一点是,在动态数据窗口对象生成时,其标题区(Header Band)中的文本不能直接显示成汉字,这的确是一点遗憾,不过这个问题可以通过映射的方法得到解决。
一、问题的提出设有如下两张表:A表中的记录是用户可以在程序运行期间进行自由增加、修改、删除和更新的,B表中的属性(即:字段)由A表中的记录决定并动态创建,而且,能够方便地对B表中的数据提供汉化的操作界面。
当然,将B表创建为下表也是可以的,但是,在动态生成数据窗口对象时,其标题区(Header Band)中的文本不会显示成汉字,而是一些乱码,反而不利于问题的解决。
二、问题的解决1、动态创建B表的解决我们要动态创建B表,就要构建动态SQL语句。
何谓动态SQL语句?数据库应用程序通常进行确定的工作,因此在编写和编译时,就可以确定完整的SQL语句,但当需要使用PowerBuilder不支持的嵌入SQL语句(如DDL语句),或者在编译时不知道语句的具体格式或参数,则在运行时构成SQL语句,这类语句被称为动态SQL语句。
动态SQL语句的格式:EXECUTE IMMEDIA TE SQL statement [Using Transation Object];参数说明:SQL statement 包含一条有SQL语句的字符串Transation Object 事务对象2、动态数据窗口对象创建及标题区(Header Band)中文本汉化的解决(1) 在程序运行时,我们可以调用Create函数动态生成数据窗口对象。
pb 数据窗体 参数
pb 数据窗体参数
E在PowerBuilder(PB)中,数据窗体(DataWindow)的参数传递通常涉及使用函数如OpenWithParm、CloseWithReturn等。
这些函数在进行窗口操作(打开或关闭)时,会将参数存入Message消息对象中。
当传递参数给数据窗体时,这些参数的数据类型(如数值、字符串或PB对象等)决定了它们在Message 对象中的存储方式。
例如,对于数值类型的参数,它们会保存在Message.DoubleParm属性中;对于字符串类型的参数,会保存在Message.StringParm属性中;而对于PB对象类型的参数,则会保存在Message.PowerObjectParm属性中。
如果需要传递多个参数,可以通过定义结构变量来包含这些参数,然后将这个结构变量作为参数传递给数据窗体。
在数据窗体的打开事件中,可以通过访问Message对象的相应属性来获取这些参数的值。
具体的参数传递方式会根据实际应用的需求和场景而有所不同。
因此,在实际开发中,需要根据具体的需求和场景来选择合适的参数传递方式,并确保参数的正确传递和处理。
PB常用方法
PB数据窗口datawindow技术更新时间:2014-2-1 17:17:10pb数据窗口datawindow常用技巧1、如何让存储文件目录的列,显示图片?答:选择对应的column的display as picture属性为true2、如何复制grid类型的所选择的行的数据到系统剪切板?答:string ls_selectedls_selected=dw_1.object.datawindow.selected.dataclipbord(ls_selected)3、如何复制graph风格的datawindow中的图形到剪切板?答:dw_1.clipbord("gr_1")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.object.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、如何获取指定名称的datawindowobject?答: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.object.datawindow.querymode='yes'将datawindow改变为查询模式后,接收用户的输入,再使用一下代码获取结果:dw_1.accepttext()dw_1.retrieve()13、如何缩放datawindow的打印大小?答:dw_1.object.datawindow.zoom=150 or dw_1.object.datawindow.zoom=7514、如何在已过滤后的数据基础上对datawindow进行过滤?答:dw_1.setfilter(dw_1.describe("datawindow.table.filter")+your_join+your_new_filter)dw_1.filter() 15、如何在datawindow中显示动态时间?答:建立一个计算域,表达式为string(datetime(today(),now()),'yyyy年mm月dd日 hh点mm分ss秒'),同时设置datawindow 的属性dw_1.object.datawindow.timer_interval=50016、如何让带用title bar的datawindow控件的标题栏诚活动窗口的颜色?答:外部函数定义:funcation logn setactivewindow(long hwnd ) library "user32.dll"datawindow常用技巧2008年01月17日星期四 11:171、如何让存储文件目录的列,显示图片?答:选择对应的column的display as picture属性为true2、如何复制grid类型的所选择的行的数据到系统剪切板?答:string ls_selectedls_selected=dw_1.object.datawindow.selected.dataclipbord(ls_selected)3、如何复制graph风格的datawindow中的图形到剪切板?答:dw_1.clipbord("gr_1")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.object.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、如何获取指定名称的datawindowobject?答: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.object.datawindow.querymode='yes'将datawindow改变为查询模式后,接收用户的输入,再使用一下代码获取结果:dw_1.accepttext()dw_1.retrieve()13、如何缩放datawindow的打印大小?答:dw_1.object.datawindow.zoom=150 or dw_1.object.datawindow.zoom=7514、如何在已过滤后的数据基础上对datawindow进行过滤?答:dw_1.setfilter(dw_1.describe("datawindow.table.filter")+your_join+your_new_filter)dw_1.filter() 15、如何在datawindow中显示动态时间?答:建立一个计算域,表达式为string(datetime(today(),now()),'yyyy年mm月dd日 hh点mm分ss秒'),同时设置datawindow 的属性dw_1.object.datawindow.timer_interval=50016、如何让带用title bar的datawindow控件的标题栏诚活动窗口的颜色?答:外部函数定义:funcation logn setactivewindow(long hwnd ) library "user32.dll"datawindow常用技巧2008年01月17日星期四 11:171、如何让存储文件目录的列,显示图片?答:选择对应的column的display as picture属性为true2、如何复制grid类型的所选择的行的数据到系统剪切板?答:string ls_selectedls_selected=dw_1.object.datawindow.selected.dataclipbord(ls_selected)3、如何复制graph风格的datawindow中的图形到剪切板?答:dw_1.clipbord("gr_1")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.object.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、如何获取指定名称的datawindowobject?答: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.object.datawindow.querymode='yes'将datawindow改变为查询模式后,接收用户的输入,再使用一下代码获取结果:dw_1.accepttext()dw_1.retrieve()13、如何缩放datawindow的打印大小?答:dw_1.object.datawindow.zoom=150 or dw_1.object.datawindow.zoom=7514、如何在已过滤后的数据基础上对datawindow进行过滤?答:dw_1.setfilter(dw_1.describe("datawindow.table.filter")+your_join+your_new_filter)dw_1.filter() 15、如何在datawindow中显示动态时间?答:建立一个计算域,表达式为string(datetime(today(),now()),'yyyy年mm月dd日 hh点mm分ss秒'),同时设置datawindow 的属性dw_1.object.datawindow.timer_interval=50016、如何让带用title bar的datawindow控件的标题栏诚活动窗口的颜色?答:外部函数定义:funcation logn setactivewindow(long hwnd ) library "user32.dll"word文档答:给你两个函数: 1、辅助函数 $pbexportheader$f_cncharnum.srf $pbexportcomments$得到字符串中汉字或者双字节的个数 global type f_cncharnum from function_object end type forward prototypes global function in teger f_cncharnum (string astring) end prototypes global function integer f_cncharnum (string ast ring); //函数名: f_cncharnum //用途: 返回一个字符串中汉字的个数 //输入: astring - string, 给定的字符串 //返回值: li_num - integer, 给定的字符串中汉字的个数 //注意: 1. 此方法基于汉字的国标汉字库区位编码的有效性,不符合此编码的系统此函数无效! // 2. 若汉字串含有非汉字字符,如图形符号或ascii码,则这些非汉字字符将保持不变. //例如: li_ret = f_cncharnum("摆渡人ferryman") li_ret = 3 string ls_ch //临时单元 string ls_secondsectable //存放所有国标二级汉字读音 integer li_num = 0 //返回值 integer i,j for i = 1 to len(astring) ls_ch = mid(astring,i,1) if asc(ls_ch) >= 128 then //是汉字 li_num++ i = i+1 end if next return li_num end function --------------------------------------------------------------- 2、转到word $pbexportheader$f_outputtoword_new.srf global type f_outputtoword_new from function _object end type forward prototypes global function integer f_outputtoword_new (datawindow adw) end prototypes global function integer f_outputtoword_new (datawindow adw); //函数名:f_outputtoword_new //输入: adw - datawindow,指定的数据窗口 //返回值: integer constant integer pplayoutblank = 12 oleobject ole_object ole_object = create oleobjec t integer li_ret li_ret = ole_object.connecttoobject("","word.application") if li_ret <> 0 then //如果word还没有打开,则新建。
PB中TreeView控件使用技巧
PB中TreeView控件使用技巧PB中TreeView控件使用技巧PB中TreeView控件使用技巧PowerBuilder中的TreeView 控件为树状游览,类似于WINDOWS的资源管理器,其特点是信息项呈树状层次结构,能更清晰地表现主、细目关系,操作非常方便。
在应用中可将其与DataWind ow 配合使用,一个提供信息的分类体系,一个提供具体信息,达到珠连碧合的奇妙效果。
它特别适用于多级信息的分类检索,是多级菜单所无法比似的,它的表现形式深受程序设计人员和广大用户的喜爱,在许多应用软件中都能看到她的英姿。
在PowerBuilder下,TreeView 控件的应用较其它控件要复杂得多,刚接触它时往往有些不知所措。
但如果将它的机理搞清楚,掌握它也不是很难的事。
下面我结合长白公司图书分类检索的实例,把TreeView 控件的使用方法和大家探讨一下。
一、应用TreeView 控件的一般步骤1、建立一个应用,并设好与数据库的接口,这是操作数据库的前提。
2、在应用中建一应用窗口W_1,在其上加入二个名为dw_3和dw_4的datawindow控制对象和一个名为TV_1的TreeView对象。
3、修改DW_3属性General:把Datawindow object name填写一个已存在的名为DW_date的datawindow(注意:它与datawindow控制对象是不同的),用于生成树视图项,将其Visible项设为不可见。
4、修改DW_4属性General:把Datawindow object name填写一个已存在的名为DW_TS的datawindow对象,用于显示查询出的具体内容。
5、编辑TV_1的属性TreeView的树视图项不能直接编辑,必须在Script中编写程序。
Picture:在Picture Name中加入四个不同的图标,用于代表树视图中的两个层次(一、二级)、两种状态(未选、选中)。
PB DataWindow 自动化处理
PB DataWindow 自动化处理此文档用于描述PBCOMMENT 5.3 以上的版本提供的自动帮助写代码的功能。
PBCOMMENT 5.3及以上的版本新增了根据字段列表,变量列表,datawindow 赋值语句列表,自动生成datawindow 之间复制数据的代码;自动生成结构体变量和datawindow 之间的赋值代码;自动生成变量列表和datawindow 之间的赋值代码。
一、字段列表,变成DATAWINDOW 处理语句这个功能主要解决DW字段处理语句自动根据字段列表生成,而不再需要手工写。
我们要将(这些列表你可以从DA TAWINDOW的SELECT 语句里复制出来):mzhmbarcodeksmcbrxmbrxbbrnljymcyblbcxsjcxckbgrqbgddsfje变成为DATAWINDOW的处理语句:dw_1.object.mzhm[ll_index]dw_1.object.barcode[ll_index]dw_1.object.ksmc[ll_index]dw_1.object.brxm[ll_index]dw_1.object.brxb[ll_index]dw_1.object.brnl[ll_index]dw_1.object.jymc[ll_index]dw_1.object.yblb[ll_index]dw_1.object.cxsj[ll_index]dw_1.object.cxck[ll_index]dw_1.object.bgrq[ll_index]dw_1.object.bgdd[ll_index]dw_1.object.sfje[ll_index]执行的操作步骤如下:先选中要处理的代码块(每次处理都需要这样操作,下面牵涉的地方就不再重复说明),点自动填写前缀和后缀模块(下图中红色圈部分),将跳出“Fill prefix or postfix”窗口,选择“Prefix”(即前缀,其他两个分别为后缀和两边都填写),在输入框里输入“dw_1.object”表示对这些字段处理成为dw_1 的字段语句。
在PB中利用DataStore实现查询条件的记忆
在PB中利用DataStore实现查询条件的记忆---- DataStore是非可视的数据窗口控件,它能够为应用程序存储数据而不消耗任何图形资源。
除了一些可视特征外,它的功能及行为与数据窗口控件相同。
因此,我们可以利用DataStore的特点方便地记忆和维护查询条件。
---- 第一步,在数据库中建立一个查询条件表,其中包含每个要用到的条件字段(如标题、文献来源、开始日期、结束日期等)和一个日期字段、时间字段。
该表用来保存最近使用的10个(如果需要可以保存任意个)不同条件,每个条件就是一条记录,后两个字段(日期、时间)用来记载条件的使用时间。
---- 第二步,创建一个包含查询条件表中所有字段的数据窗口对象dw_condation,按使用时间的先后排序。
进行查询条件设置时,---- 第三步,构造如下图的查询条件设置窗口。
---- 四个复选框对应四个条件字段,左、右方向按钮用来浏览设置最近使用过的条件。
---- 第四步,为窗口事件及各控件编写相应的程序。
---- 定义窗口实例变量:datastore ids_Datalong currentrow窗口的Open事件:ids_Data = Create DataStore//创建数据存储实例ids_Data.DataObject = "dw_condation"//将dw_condation数据窗口对象与ids_Data连接ids_Data.SetTransObject(sqlca)ids_data.retrieve()if ids_data.rowcount() >1 then//设置当前条件为最后一次使用的条件pb_3.enabled=truecurrentrow=ids_data.rowcount()trigger event ue_setquery(ids_data.rowcount())end if窗口自定义事件ue_setquery:string bt,source//标题、文献来源date start_day,end_day//开始日期、结束日期long page//页号//根据参数rownum从数据存储实例中得到各条件值bt=ids_Data.Object.bt[rownum]source=ids_Data.Object.source[rownum]start_day=ids_Data.Object.begin[rownum]end_day=ids_Data.Object.end[rownum]page=ids_Data.Object.page[rownum]//初始化各窗口控件的状态cbx_1.checked=falsecbx_2.checked=falsecbx_3.checked=falsecbx_4.checked=falsesle_1.enabled=falseddlb_1.enabled=falseem_1.enabled=falseem_2.enabled=falseem_3.enabled=false//分别设置各个条件值if not isnull(bt) and trim(bt)<>"" thencbx_1.checked=truesle_1.enabled=truesle_1.text=btend ifif not isnull(source) and trim(source)<>"" thencbx_2.checked=trueddlb_1.enabled=trueddlb_1.text=sourceend ifif isnull(start_day) orstart_day=date("1900-1-1") thenem_1.text=string(today(),"yyyy-mm-dd")elsecbx_3.checked=trueem_1.enabled=trueem_1.text=string(start_day,"yyyy-mm-dd")end ifif isnull(end_day) orend_day=date("1900-1-1") thenem_2.text="2050-1-1"elsecbx_3.checked=trueem_2.enabled=trueem_2.text=string(end_day,"yyyy-mm-dd")end ifif not isnull(page) and page<>0 thencbx_4.checked=trueem_3.enabled=trueem_3.text=string(page)end if窗口的Close事件:destroy ids_data//清除数据存储实例pb_3(向前按钮)的Clicked事件:if currentrow >1 then//设置前一个条件为当前条件currentrow=currentrow - 1trigger event ue_setquery(currentrow)pb_4.enabled=trueif currentrow=1 then this.enabled=falseend ifpb_4(向后按钮)的Clicked事件:if currentrow< ids_data.rowcount() then//设置后一条件为当前条件currentrow=currentrow + 1pb_3.enabled=trueif currentrow=ids_data.rowcount()then this.enabled=falsetrigger event ue_setquery(currentrow)end ifpb_1(确定按钮)的Clicked事件:string bt,source,sqltext,sql_all,sql_title,sql_source,sql_date,sql_pagedate start_day,end_daylong page,rownum,rowcountboolean exist//根据用户设置的条件动态生成查询SQL语法if cbx_1.checked thenbt=sle_1.textsql_title='"index"."title" like '+"'%"+bt +"%'"end ifif cbx_2.checked thensource=ddlb_1.textsql_source=' and "index"."source" like ' +"'%"+source +"%'"end ifif cbx_3.checked thenstart_day=date(em_1.text)end_day=date(em_2.text)sql_date='and"index"."date">='+"'"+string(start_day,"yyyy.mm.dd")+"'"+'and '+'"index"."date"< ='+"'"+string(end_day,"yyyy.mm.dd") +"'"end ifif cbx_4.checked thenpage=long(em_3.text)sql_page=' and "index"."page"='+string(page) end ifsqltext='SELECT "index"."num", ' &+'"index"."title", ' &+'"index"."source", ' &+'"index"."date", ' &+'"index"."page", ' &+'"index"."other" ' &+' FROM "index" ' &+' WHERE '+sql_title +sql_source+sql_date+sql_page &+' ORDER BY "index"."num" ASC 'rowcount=ids_data.rowcount()for rownum=1 to rowcount//判断该条件是否已经存在if ids_data.object.data[rownum,1]=bt and &ids_data.object.data[rownum,2]=source and & ids_data.object.data[rownum,3]=start_day and & ids_data.object.data[rownum,4]=end_day and & ids_data.object.data[rownum,5]=page thenids_data.object.data[rownum,6]=now()ids_data.object.data[rownum,7]=today() exist=trueexitend ifnextif not exist then//条件不存在,记忆新条件if rowcount< 10 thenelseids_data.deleterow(1)end ifrownum=ids_data.insertrow(0)ids_data.object.data[rownum,1]=btids_data.object.data[rownum,2]=source ids_data.object.data[rownum,3]=start_day ids_data.object.data[rownum,4]=end_day ids_data.object.data[rownum,5]=pageids_data.object.data[rownum,6]=now() ids_data.object.data[rownum,7]=today() end ifids_data.update()//根据生成的SQL语句,修改主窗口中的数据窗口语法,进行查询w_index.dw_1.setsqlselect(sqltext)close(parent)if isvalid(w_index)then w_index.dw_1.retrieve()pb_2(取消按钮)的Clicked事件:close(parent)>>>转载>>>>>>Datawindow控件实质是一个窗口,而Datastore则是一个隐藏的窗口,即Visible,Redraw属性都为假,这也是为何Datastore操作数据比Datawindow更快的一个原因,它占用的系统资源更少,消耗的系统时间也更少。
powerbuilder(pb)数据窗口(datawindow)缓冲区和状态解释
PowerBuilder数据窗口缓冲区与状态详解Powerbuilder(pb)的datawindow(数据窗口)的各个缓冲区和状态是pb数据窗口的非常重要的,对这些概念的理解,将有助于我们认识pb数据窗口的优势。
基本概念数据窗口的三个缓冲区:Primary!Delete!Filter!Getitemstatus(row,列名或者列号,缓冲区)当要取整个行的状态时,列名或者列号用0表示数据窗口中数据项状态Notmodified! 从数据retrieve出来后没有改变过Datamodified! 数据retrieve出来后有过改变New! 数据窗口增加了一列但没有录入过数据,该列的状态就是new!Newmodified! 数据窗口增加了一列,同时改列被录入了数据,该列的状态就是newmodified!retrieve出来后,结果如下:所有的行和数据项状态都是notmodified用geitemstatus(行号,列名,primary!)取每一数据项状态用getitemstatus(行号,0,primary!)去行状态001,002,ddd三个格子所在的数据项状态仍旧是notmodifiedAAA(原是Ccc)所在格子的数据项状态是datamodified第一行(001,AAA)的行状态是datamodified第二行(001,ddd)的行状态时notmodified后,如下:2点。
第三行状态就是new!请用getitemstatus(3,0,primary!)取第三行状态第三行的每一项将变为datamodified!开发中实例:表1(因为是举例,请不要考虑数据库设置中的冗余概念,如表2中的XX没必要等)需求一、删除表1中的数据的同时,把表2的数据也删除,必须删除,不考虑约束条件。
如把表1中001,002删除了,需要把表2中所有001,002的记录删除,(【删除】和【保存】是两个按钮或菜单,就是说【删除】只是删除了前台的内容,不【保存】数据库中数据是没有被删除的,数据库需要【保存】执行的时候才真正执行删除),怎么做?1、可以使用触发器;2、可以在删除之前把表1记录下来,【保存】时对比表1,看那些数据缺少了;3、……..DeletedCount ( )Getitemstring(row,列名,delete!,true)(为什么用true,不用false呢?,true是从数据库取出来的默认值,false是当前值,如果删之前用户修改过编号,但是没有保存,用false就会有问题)需求二、把表1中编号001改为了A01,002改为001,003改为B05,004,005不变(没有任何规律的),要求表二的编号也这么改过来。
PB动态创建数据窗口
PB动态创建数据窗⼝动态创建数据窗⼝在实际应⽤中,经常需要根据⽤户需求来动态创建数据窗,⼀般⽅法是这样的。
在⼀个window中加⼊⼀个数据窗控件,如dw_new,但是该数据窗没有dataobject,(空⽩的)就可以⽤以下语法来创建:dw_new.create(ls_syntax,ls_error)//创建语法,错误信息ls_syntax可以⽤以下三种⽅法来形成:⼀、动态由sql语法创建://连接到pb的example数据库stringls_sql,ls_syntax,ls_errorls_syntax=''selectfromdepartment''ls_syntax=sqlca.SyntaxFromSQL(ls_sql,''style(type=grid)'',ls_error)iflen(ls_error)>0thenmessagebox(''Error'',''SyntaxFromSQLError:~r''+ls_error)elsedw_new.create(ls_syntax,ls_error)iflen(ls_error)>0thenMessageBox("Error","Createhavetheseerrors:~r"+ls_error)elsedw_new.settransobject(sqlca)dw_new.retrieve()endifendif⼆、由另⼀个数据窗的syntax来创建stringls_syntax,ls_errorls_syntax=dw_test.describe(''datawindow.syntax'')dw_new.create(ls_syntax,ls_error)ifls_error''''thenmessagebox(''CreateError'',ls_error)elsedw_new.settransobject(sqlca)dw_new.retrieve()endif三、读取psr⽂件来创建stringls_syntax,ls_error,ls_retls_ret=char(13)+char(10)//回车键intli_fileNumlongli_lengthli_FileNum=FileOpen("efef.psr",Streammode!,read!,shared!,Replace!)ifli_filenum>0thenFileSeek(li_FileNum,158,FromBeginning!)li_length=fileRead(li_filenum,ls_syntax)endiffileclose(li_filenum)ifli_length=0thenreturnls_syntax="release5;"+ls_ret+ls_syntax//截掉ls_syntax中的数据部分,5.0以"sparse(names="dept_name?)"作为参考位置//6.0以html(作为参考位置longpos1,pos2pos1=pos(ls_syntax,''sparse(names="'',1)pos2=pos(ls_syntax,''"'',pos1+16)ls_syntax=left(ls_syntax,pos1)+mid(ls_syntax,pos1+1,pos2-pos1+1)dw_New.create(ls_syntax,ls_error)ifls_error''''thenmessagebox(''CreateError'',ls_error)elsedw_new.settransobject(sqlca)dw_new.retrieve()endif//pb6,pb7的代码可以参照pb5⾃⼰写,只是⽂件头和数据窗结束标记不同⽽已。
PB中的TreeView和listview的使用
PowerBuilder中的TreeView和listview的使用PowerBuilder中的TreeView 控件为树状游览,类似于WINDOWS的资源管理器,其特点是信息项呈树状层次结构,能更清晰地表现主、细目关系 ,操作非常方便。
在应用中可将其与DataWindow 配合使用, 一个提供信息的分类体系,一个提供具体信息,达到珠连碧合的奇妙效果。
它特别适用于多级信息的分类检索, 是多级菜单所无法比似的,它的表现形式深受程序设计人员和广大用户的喜爱,在许多应用软件中都能看到她的英姿。
在PowerBuilder下,TreeView 控件的应用较其它控件要复杂得多,刚接触它时往往有些不知所措。
但如果将它的机理搞清楚,掌握它也不是很难的事。
下面我结合长白公司图书分类检索的实例,把TreeView 控 件的使用方法和大家探讨一下。
一、应用TreeView 控件的一般步骤1、 建立一个应用,并设好与数据库的接口,这是操作数据库的前提。
2、 在应用中建一应用窗口W_1,在其上加入二个名为dw_3和dw_4的datawindow控制对象和一个名为TV_1的TreeView对象。
3、 修改DW_3属性General:把Datawindow object name填写一个已存在的名为DW_date的datawindow(注意:它与datawindow控制对象是不同的),用于生成树视图项,将其Visible项设为不可见。
4、 修改DW_4属性General:把Datawindow object name填写一个已存在的名为DW_TS的datawindow对象,用于显示查询出的具体内容。
5、 编辑TV_1的属性TreeView的树视图项不能直接编辑,必须在Script中编写程序。
Picture:在Picture Name中加入四个不同的图标,用于代表树视图中的两个层次(一、二级)、两种状态(未选、选中)。
General:可根据具体应用设定是否选中,其中:Delete Items:运行中是否允许删除表项。
PB复习题及答案
一:选择题1.关于Powerbuilder的标识符下列说法中正确的是(D)A . PB的标识符可以以数字开头B.PB中的标识符只能以数字开头C.PB的标识符只能以数字或者下划线开头D.PB中的标识符只能以英文字母或下划线开头2.在PB中提供了4种指示代词,其中指代菜单所挂靠的当前窗口的代词是(D)A ThisB SuperC ParentD parentwindow3.PB中循环语句一共有(C)种A.3 B. 4 C.5 D。
64.FOR hap=200 TO 2 Step -2------NEXT以上循环语句执行的次数为__B_次A.98 B.100 C.101 D.1985.在PB中默认的事物对象的名称是_B__A . SQLSA B.SQLCA C .SQLDA D.SQLCODE二.填空题1.创建PB应用程序时,会产生三个文件,一个是_工作区_文件,扩展名为.pbw ,一个是目标文件,扩展名为_.pbt_,一个是库文件,扩展名为_.pbl_.2.在PB10.5中窗口类型一共有_5_种(主窗口、子窗口、弹出式窗口、响应窗口、MDI窗口),其中MDI/MDIHelp类型的窗口必须设置菜单_正确_(正确/错误)。
3.在PowerScript语言中,强制退出循环体的语句是_exit_.4.数据窗口由_数据窗口控件_和_数据窗口对象_两部分组成。
5.在使用数据窗口中(DataWindow)时,使用DataWindow控件的_retrieve()_函数实现检索并显示数据,使用函数设置数据窗口的数据过滤条件。
6.PB中的续行符是_&_._isnull_函数用于判断变量是否为空值。
7.使用游标读取数据的四个过程是_定义游标_,打开游标,_拨动游标_,关闭游标。
8.PB中事务提交的命令是_commit_,事务撤销并回滚的命令是_rollback_;9.在PB中,通过_Insert Row()_函数(方法)向当前数据窗口dw_1插入一个新的空行,通过Delete Row()_函数(方法)删除当前数据窗口中的指定行,通过_Save Changes()_函数(方法)保存对数据窗口的更新。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
在PB中实现datawindow树形结构
树形结构在Windows环境中被普遍应用,它以简捷的界面深受用户喜爱。
但在数据库开发中面对层次多、结构复杂的数据,如何快速地构造树形目录呢?
实现关键技术
PowerBuilder提供的控件中包含了Treeview控件,但树的具体形成还需用户编写脚本实现,即它的列表项要在程序中动态添加,而这些列表数据通常由用户已录入在数据库中,并作为数据库维护的一项内容。
为了能快速实现数据库的树形结构,我们可以采用编码法,即利用编码表来实现。
编码表的基本字段包括编码和编码名称及其它属性字段,属性字段的个数不限,其编码规则是以数字、字母的位数来区分不同层次,同一父接点下的同一层编码位数相同,层次按位数递增,程序通过判断编码位数查找祖先接点数来决定所在层数。
下面的编码给出产品分类及所在层数:
编码编码名称
1大类1
11小类11
1101小类1101
1102小类1102。
1188小类1188
12小类12
121小类121
122小类122。
129小类129
2大类2
201小类201
2011小类2011
2012小类2012
202 小类202。
222 小类222
从上面的编码可以看出第一层的长度是一位,第二层的长度有两位、也有三位,第三层的长度有三位、也有四位,同一父接点下的同一层编码位数根据该父接点下编码个数决定,如只用数字表示时超过10个小于100个就用两位表示,小于10个就用一位表示,其它类推,用户需要做的是先要设计树的结构和对应编码,并把相应名称进行录入,然后程序在读取这些数据时形成树。
对于同一层编码位数相同的编码将作为本编码的特例。
例如何确定1188的层数,首先找到1188的父接点为11,再找到11的父接点为1,根据以上步骤就可以确定1188的层数为3。
编码法的优点是可以适应任何复杂的层次数据,实现方法简单,且树内容有变动时,无需更改程序代码。
建造datawindow standard visual可视类
在constructor事件中根据用户传过来的datawindow重构datawindow,增加几个字段用
于构造dwtree。
要求用户传过来的datawindow的类型为Tabular,sort字段为字符型且只有一个。
本对象脱离具体的数据库,只要用户的datawindow满足上面的要求就能调用。