【PB】如何给datawindow某一列动态设置成dddw或者ddlb,并且赋值

转自:https://blog.csdn.net/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.csdn.net/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个回答:
呵呵。谢谢。我发现问题所在了。感谢各位的帮助

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值