转自:https://blog.youkuaiyun.com/tlammon/article/details/50935497
动态实现下拉数据窗口DDDW的设定
问:在数据窗口对象画板中可以设定列的编辑风格为下拉数据窗口(DropDownDataWindow),请问在程序中可以动态实现这项功能吗?
答:可以的,假设所设定列为部门号"department_id",相关连的子数据窗口为"d_dddw_dep",显示列为部门名称"dept_name",数据列为部门号"dept_id",实现方法如下:
dw_1.Modify("department_id.DDDW.Name=d_dddw_dep ")
dw_1.Modify("department_id.DDDW.DisplayColumn=''dept_name'' ")
dw_1.Modify("department_id.DDDW.DataColumn=''dept_id'' ")
或:
dw_1.object.department_id.dddw.name = "d_dddw_dep"
dw_1.object.department_id.DDDW.DisplayColumn = "dept_name" dw_1.object.department_id.DDDW.DataColumn = "dept_id"
注:PowerBuilder有一个小工具DWSyntax(程序名为:dwsyn60.exe),提供了获得及修改数据窗口、列等的各项属性值的语法,对编程非常有帮助。上述脚本在DWSyntax中都能找到new->tool ->datawindow syntax。
【PB】如何给datawindow某一列动态设置成dddw或者ddlb,并且赋值
(1)切换成DDDW:
dw_1.Modify("#1.dddw.Name='dddw_jg'")
dw_1.Modify("#1.dddw.DisplayColumn='name_jg'")
dw_1.Modify("#1.dddw.DataColumn='id_jg'")
(2)切换成DDLB:
dw_1.Modify("#1.ddlb.case='any'")
dw_1.Object.#1.Values ="red~t1/white~t2"
(3)切换成EDIT:
dw_1.Modify("#1.edit.case='any'")
dw_1.Modify("#1.edit.AutoSelect='Yes'")
(4)获取当前风格:
dw_1.Describe("#1.Edit.Style")
(5)如果还不行,可能得要如下操作:
dw_1.Modify("#1.dddw.Name=''")一下;
-----------------------------------------------------------------------------------------------
方法:动态建立变换dddw和edit风格
//d_province为下拉数据窗囗对象
If is_flag = 'A ' Then //变为dddw
dw_1.Modify( "province.dddw.Name = 'd_province ' ")
dw_1.Modify( "province.dddw.DataColumn = 'id ' ")
dw_1.Modify( "province.dddw.DisplayColumn = 'province ' ")
dw_1.Modify( "province.dddw.AllowEdit = 'True ' ")
dw_1.Modify( "province.dddw.AutoRetrieve = 'True ' ")
is_flag = 'B '
Else //变回edit
dw_1.Modify( "province.dddw.Name = ' ' ")
dw_1.Modify( "province.dddw.DataColumn = ' ' ")
dw_1.Modify( "province.dddw.DisplayColumn = ' ' ")
dw_1.Modify( "province.dddw.AllowEdit = ' ' ")
dw_1.Modify( "province.dddw.AutoRetrieve = ' ' ")
is_flag = 'A '
End If
转自:https://blog.youkuaiyun.com/tlammon/article/details/43735715
如何动态修改dddw列的宽度
如何动态修改dddw列的宽度。
因为界面上有很多DDDW,在宽度上各有不同。
如何用动态修改dddw的宽度,以保持dddw下拉的时候,
显示的DDDW的宽度正好和列的宽度一致。
这个问题第1个回答:
用数据窗口控件的GetChild(ldwc_child)函数获取到子数据窗口,然后就可以用ldwc_child改变dddw的宽了高了萨。
比如:
datawindowchild ldwc_child
dw_list.GetChild(ldwc_child)
ldwc_child.modify('column_name.width = dw_list的宽度')
ldwc_child.modify('column_name.height = dw_list的高度')
ldwc_child.modify('datawindow.detail.height = dw_list的高度') // 高度和宽度好像还要减一定的值
然后还要设置dw_list关联的datawindow的宽度,高度和细目带的高度,大概就是这个意思,具体的自己去试一下就知道了
这个问题第2个回答:
datawindowchild ldwc_child String ls_DisplayColumn, ls_Width ls_DisplayColumn = dw_1.Describe("c.DDDW.DisplayColumn") dw_1.GetChild( 'c', ldwc_child ) ls_Width = ldwc_child.Describe( ls_DisplayColumn + ".Width" ) dw_1.Object.C.Width = ls_Width
大致的意思是取dddw字段的显示字段名,再取子数据窗口中该显示字段的宽度,然后设置dddw为该宽度。
其中c为dddw字段。
前提是下拉的子数据窗口中,只显示这个DisplayColumn字段。
这个问题第3个回答:
dddw.Modify(ls_column_chi+".width='"+string(1000)+"'")
dddw.Modify(ls_column_chi+".width="+string(1000)+"")
dddw.Modify("#"+string(1)+".width='"+string(1000)+"'")
都试过了不行。。。还是改变不了。有改变过实际经验的说说。确定能否改变
这个问题第4个回答:
不用getchild
dw_control.Object.columnname.dddw.PercentWidth = 100
这个问题第5个回答:
如果只是保持一致,需要动态指定吗,直接在DW编辑窗口指定
dw_control.Object.columnname.dddw.PercentWidth = 100就OK了,什么代码也不用写
这个问题第6个回答:
引用 4 楼 AFIC 的回复:
不用getchild
dw_control.Object.columnname.dddw.PercentWidth = 100
呵呵。我是要修改dddw里面的列的宽度。不是修改下拉框时显示的DDDW宽度
情况是这样的。某个数据窗口,在屏幕分辨率改变后。我动态的调整了列的宽度。
在这种情况下,就会异致DDDW的列的宽度和主窗口中列的宽度相差过大。现在我需要
修改DDDW中,列的宽度以保持和主界面的列的宽度一致。大概就是这么个意思吧。
这个问题第7个回答:
引用 1 楼 jjoulejcc 的回复:
用数据窗口控件的GetChild(ldwc_child)函数获取到子数据窗口,然后就可以用ldwc_child改变dddw的宽了高了萨。
比如:
datawindowchild ldwc_child
dw_list.GetChild(ldwc_child)
ldwc_child.modify('column_name.width = dw_list的宽度')
ldwc_child.modify('column_name.height = dw_list的高度')
ldwc_child.modify('datawindow.detail.height = dw_list的高度') // 高度和宽度好像还要减一定的值
然后还要设置dw_li…
这样不行吗?
这个问题第8个回答:
引用 7 楼 foreveris 的回复:
引用 1 楼 jjoulejcc 的回复:
用数据窗口控件的GetChild(ldwc_child)函数获取到子数据窗口,然后就可以用ldwc_child改变dddw的宽了高了萨。
比如:
datawindowchild ldwc_child
dw_list.GetChild(ldwc_child)
ldwc_child.modify('column_name.width = dw_list的宽度')
ldwc_child.modify('column_name.height = dw_list的高度')
ldwc_child.modify('datawindow.detail.height = dw_list的高度') // 高度和宽度好…
只有ldwc_child.modify('datawindow.detail.height = dw_list的高度') // 高度和宽度好像还要减一定的值
这一句发挥作用了。可是这个把高度也修改了。。。太夸张点了吧?
呵呵。不需要修改高度
这个问题第9个回答:
呵呵,还有这样的需求:
dddw.Modify(ls_column_chi+".width="+string(1000))
这个问题第10个回答:
呵呵。谢谢。我发现问题所在了。感谢各位的帮助