超难的问题, about datawindowchild and userobject

hzhxxx 2002-11-07 08:39:21
1. 怎么修改下拉子数据窗口的数据源,要求是完全的把数据源的 select 语句完全的改掉.
2. 怎么在下拉子数据窗口弹出的时候,自动隐藏他(就是在该列下拉的时候,我使用 openuserobject)
动态的创建了一个 userobject ,我怎么使这个 userobject 总是在下拉子数据窗口的上面,或者 hide datawindowchild

假如要回答,请自己测试后才回答,因为我使用了 Setposition()...
...全文
110 38 打赏 收藏 转发到动态 举报
写回复
用AI写文章
38 条回复
切换为时间正序
请发表友善的回复…
发表回复
hzhxxx 2002-11-14
  • 打赏
  • 举报
回复
是创建列不成功!不知道怎么回事情
llitcwl 2002-11-14
  • 打赏
  • 举报
回复
我想你还是思路错了,按这些代码看下来,我想他还是动态打开一个用户对象,不是在DW中创建下拉的,这样当然可以做了,可以去
http://www.longlive.com.cn/bbsnew/dispbbs.asp?boardID=1&RootID=4146&ID=4146 看看,昨天一些讨论的结果和ZHANWEI版主发的效果图。
hzhxxx 2002-11-14
  • 打赏
  • 举报
回复
//|dwdata=|xm|,|dwdisp=|xm|,|dwsql=|select u_xh,xm from sys_user|,
//|input=|uo_winput_dw|,|inputcs=||dwobj=|dw_yp_dm_gzry|,|dwdata=|xm|,|dwdisp=|xm|,
//|finddm=|dm|,|havejm=|1|,|w=|0|,|h=|660|,|,

这就是别人的程序的 每个列的 tag 属性中写的东西,我解释一下!

|dwdata=|xm|,|dwdisp=|xm|,|dwsql=|select u_xh,xm from sys_user|,
这一句是动态的创建哪个用来显示数据的数据窗口对象,(在程序中,pbm_dwndropdown 中 return 1,各位清楚的,不弹出)就是我现在的问题

|input=|uo_winput_dw|,|inputcs=||dwobj=|dw_yp_dm_gzry|,|dwdata=|xm|,|dwdisp=|xm|,|finddm=|dm|,|havejm=|1|,|w=|0|,|h=|660|,|,

这一句就是动态的 Operuserobject 的语句,用来实际的选择数据!

他只要把这整句话写下,就自动下拉,假如数据院变化,改变相应的 SQL


特别掉,我希望能集思广益,把这个搞好!

谢谢了!

现在主要就是不能修改

table(column=(type=char(36) update=yes updatewhereclause=yes name=table_chinese dbname="report_table.table_chinese" )
column=(type=char(30) key=yes update=yes updatewhereclause=yes name=table_english dbname="report_table.table_english" )

这个东西,我不知道是否使用 create column ,但是我找了资料,有个

datawindow 的 table 属性,好象没用,假如是 使用 create column ,好象是不能
创建属于哪个表的列的






hzhxxx 2002-11-14
  • 打赏
  • 举报
回复
谢谢各位!

特别谢谢 wu_07(BLUETLCK) ( ) 信誉:100

明天揭贴!

大家看看!

OK!

http://expert.csdn.net/Expert/topic/1171/1171798.xml?temp=8.671206E-02
hzhxxx 2002-11-14
  • 打赏
  • 举报
回复
函数
of_clonedddw ,改为下面的功能就支持对使用 create()创建的语法了

//////////////////////////////////////////////////////////////////////////////////////
// Dynamically re-creates a DDDW using the specified syntax.
//
// Note: The placeholder DDDW should not have any objects, otherwise it will be
// necessary to destroy all objects first!
//
// Arguments: DataWindow adw_1 Control to be modified
// String as_DDDWCol Column with edit style = DDDW
// String as_DataCol DDDW Data Column
// String as_DisplayCol DDDW Display Column
// String as_DDDWSyntax Syntax of DDDW to be cloned
// Returns: Integer 1 if successful, -1 if an error occurs
//////////////////////////////////////////////////////////////////////////////////////

Boolean lb_Data
DataWindowChild ldwc_1
Integer li_RC
Long ll_PosBeg, ll_PosData, ll_PosEnd
String ls_Modify, ls_ModifyRC


li_RC = adw_1.GetChild(as_DDDWCol, ldwc_1)

If li_RC = 1 Then
// Change the Header band properties
ll_PosBeg = Pos(Lower(as_DDDWSyntax), "header(height=")
If ll_PosBeg > 0 Then
ll_PosEnd = Pos(Lower(as_DDDWSyntax), ")", ll_PosBeg)

ls_Modify = Mid(as_DDDWSyntax, ll_PosBeg, (ll_PosEnd - ll_PosBeg))
ls_Modify = of_GlobalReplace(ls_Modify, "header(height=", "datawindow.header.height=")
ls_Modify = of_GlobalReplace(ls_Modify, "color=", "datawindow.header.color=")

ls_ModifyRC = ldwc_1.Modify(ls_Modify)
If ls_ModifyRC > "" Then
MessageBox("Error modifying DDDW Header band properties", ls_ModifyRC)
Return -1
End If
End If

// Change the Summary band properties
ll_PosBeg = Pos(Lower(as_DDDWSyntax), "summary(height=")
If ll_PosBeg > 0 Then
ll_PosEnd = Pos(Lower(as_DDDWSyntax), ")", ll_PosBeg)

ls_Modify = Mid(as_DDDWSyntax, ll_PosBeg, (ll_PosEnd - ll_PosBeg))
ls_Modify = of_GlobalReplace(ls_Modify, "summary(height=", "datawindow.summary.height=")
ls_Modify = of_GlobalReplace(ls_Modify, "color=", "datawindow.summary.color=")

ls_ModifyRC = ldwc_1.Modify(ls_Modify)
If ls_ModifyRC > "" Then
MessageBox("Error modifying DDDW Summary band properties", ls_ModifyRC)
Return -1
End If
End If

// Change the Footer band properties
ll_PosBeg = Pos(Lower(as_DDDWSyntax), "footer(height=")
If ll_PosBeg > 0 Then
ll_PosEnd = Pos(Lower(as_DDDWSyntax), ")", ll_PosBeg)

ls_Modify = Mid(as_DDDWSyntax, ll_PosBeg, (ll_PosEnd - ll_PosBeg))
ls_Modify = of_GlobalReplace(ls_Modify, "footer(height=", "datawindow.footer.height=")
ls_Modify = of_GlobalReplace(ls_Modify, "color=", "datawindow.footer.color=")

ls_ModifyRC = ldwc_1.Modify(ls_Modify)
If ls_ModifyRC > "" Then
MessageBox("Error modifying DDDW Footer band properties", ls_ModifyRC)
Return -1
End If
End If

// Change the Detail band properties
ll_PosBeg = Pos(Lower(as_DDDWSyntax), "detail(height=")
If ll_PosBeg > 0 Then
ll_PosEnd = Pos(Lower(as_DDDWSyntax), ")", ll_PosBeg)

ls_Modify = Mid(as_DDDWSyntax, ll_PosBeg, (ll_PosEnd - ll_PosBeg))
ls_Modify = of_GlobalReplace(ls_Modify, "detail(height=", "datawindow.detail.height=")
ls_Modify = of_GlobalReplace(ls_Modify, "color=", "datawindow.detail.color=")
ls_Modify = of_GlobalReplace(ls_Modify, "height.autosize=", "datawindow.detail.height.autosize=")

ls_ModifyRC = ldwc_1.Modify(ls_Modify)
If ls_ModifyRC > "" Then
MessageBox("Error modifying DDDW Footer band properties", ls_ModifyRC)
Return -1
End If
End If

// Change DataWindow.Table properties
ll_PosBeg = Pos(Lower(as_DDDWSyntax), "table(column=")
ll_PosEnd = Pos(Lower(as_DDDWSyntax), "data(")

If ll_PosEnd > 0 Then
// DataWindow.Data properties cannot be modified (Data properties will be ignored during cloning)!
lb_Data = True
Else
ll_PosEnd = Pos(Lower(as_DDDWSyntax), "text(name=", ll_PosBeg)
If ll_PosEnd = 0 Then ll_PosEnd = Pos(Lower(as_DDDWSyntax), "column(name=", ll_PosBeg)
End If

ls_Modify = Mid(as_DDDWSyntax, ll_PosBeg, (ll_PosEnd - ll_PosBeg))

ls_ModifyRC = ldwc_1.Modify(ls_Modify)
If ls_ModifyRC > "" Then
MessageBox("Error modifying DDDW DataWindow.Table properties", ls_ModifyRC)
Return -1
End If

// Add column and text objects
If lb_Data Then
ll_PosData = ll_PosEnd
ll_PosBeg = Pos(Lower(as_DDDWSyntax), "text(name=", ll_PosData)
// ls_Modify = of_GlobalReplace(ls_Modify, "column(name=", "create column(name=")
If ll_PosBeg = 0 Then ll_PosBeg = Pos(Lower(as_DDDWSyntax), "column(name=", ll_PosData)
Else
ll_PosBeg = ll_PosEnd
End If

ll_PosEnd = Pos(Lower(as_DDDWSyntax), "htmltable(", ll_PosBeg)
If ll_PosEnd = 0 Then
// Pre-6.0 DataWindow
ll_PosEnd = Len(as_DDDWSyntax) + 1
End If

ls_Modify = Mid(as_DDDWSyntax, ll_PosBeg, (ll_PosEnd - ll_PosBeg))
// ls_Modify = of_GlobalReplace(ls_Modify, "text(band=", "create text(band=")
ls_Modify = of_GlobalReplace(ls_Modify, "text(name=", "create text(name=")
//ls_Modify = of_GlobalReplace(ls_Modify, "column(band=", "create column(band=")
ls_Modify = of_GlobalReplace(ls_Modify, "column(name=", "create column(name=")

ls_Modify = of_GlobalReplace(ls_Modify, "compute(band=", "create compute(band=")

// Add other DDDW objects that may exist (report objects are not supported by this service)
ls_Modify = of_GlobalReplace(ls_Modify, "bitmap(band=", "create bitmap(band=")
ls_Modify = of_GlobalReplace(ls_Modify, "button(band=", "create button(band=")
ls_Modify = of_GlobalReplace(ls_Modify, "graph(band=", "create graph(band=")
ls_Modify = of_GlobalReplace(ls_Modify, "groupbox(band=", "create groupbox(band=")
ls_Modify = of_GlobalReplace(ls_Modify, "line(band=", "create line(band=")
ls_Modify = of_GlobalReplace(ls_Modify, "ellipse(band=", "create ellipse(band=")

// Change roundrectangle to "roundrectanglx" to avoid conflicts creating "regular" rectangle objects
ls_Modify = of_GlobalReplace(ls_Modify, "roundrectangle(band=", "create roundrectanglx(band=")
ls_Modify = of_GlobalReplace(ls_Modify, "rectangle(band=", "create rectangle(band=")
ls_Modify = of_GlobalReplace(ls_Modify, "rectanglx", "rectangle")


int i_fh
i_fh = FileOpen("c:\aa.txt",LineMode!,Write!,LockWrite!,Append!)
//IF i_fh < 1 THEN RETURN
FileWrite(i_fh,'')
FileWrite(i_fh,'')
FileWrite(i_fh,ls_Modify)
MessageBox('ls_Modify',ls_Modify)
//FileWrite(i_fh,ls_group)
FileClose(i_fh)

ls_ModifyRC = ldwc_1.Modify(ls_Modify)
If ls_ModifyRC > "" Then
MessageBox("Error creating new DDDW objects", ls_ModifyRC)
Return -1
End If
End If


Return li_RC

hzhxxx 2002-11-13
  • 打赏
  • 举报
回复


//很遗憾:
//现在问题归结为动态的创建一个用于下拉的一个子数据窗口的数据窗口对象
//注意,是 动态的创建 子数据窗口 数据窗口对象(特别)
//没有解决???

我现在有一条 SQL ,名为 s_dddwsql = 'select dm,mc from table1'
我要用这条 SQL 为数据源,动态的为 一个 dataobject(名为 dw_test) 的列 A 建立一个
下拉的子数据窗口对象(绝对不容许先建立一个 以 s_dddwsql 为数据源的 dataobject)
要求:
1. 这个对象的 display column 为 mc,data column 为 dm
2. dataobject dw_test 的 column A 的 edit 属性的 style type 在设计的时候一定是
edit
3. 可以有一个外部数据源的 dataobject(dw_drop) 为你使用

开始了,你的工具就是 PB 中的dw_test,dw_drop,s_dddwsql :





zhanwei 2002-11-13
  • 打赏
  • 举报
回复
我提两个建议:
1、数据量较少的情况下,用ddlb,有sql取数不难
2、想体现dddw的效果,可以做个假的,在焦点切换,行焦点变化时调整一下“假”dddw的位置,程序控制并不复杂。

没必要和pb的东西死磕,因为pb是呆板惯了的

搂主能引发大家的思考是好的,注意把握住方向盘
btw:
如果是字典数据输入,可以有很多方法,帮助窗口,助记码等等
hzhxxx 2002-11-13
  • 打赏
  • 举报
回复
帖子是同一个问题!

http://expert.csdn.net/Expert/topic/1171/1171798.xml?temp=.6475031
hzhxxx 2002-11-13
  • 打赏
  • 举报
回复
我知道是

所以我给了你一个 dw_dropdown,你可以在数据窗口的初始化事件中

MODIDY 这个列的 dddw 属性!

OK
llitcwl 2002-11-13
  • 打赏
  • 举报
回复
我算是明白了,告诉你一个致命的问题吧,
EDIT.STYLE在运行时是只读的,你先把这个问题给解决了再往下做吧.
hzhxxx 2002-11-12
  • 打赏
  • 举报
回复
很遗憾:

//现在问题归结为动态的创建一个用于下拉的一个子数据窗口的数据窗口对象


//注意,是 动态的创建 子数据窗口 数据窗口对象(特别)
konrong 2002-11-12
  • 打赏
  • 举报
回复
测试成功了通报声,让我知道这些办法可行。
hzhxxx 2002-11-12
  • 打赏
  • 举报
回复
谢谢各位,我也正在测试,好象到点了!
andyzq 2002-11-12
  • 打赏
  • 举报
回复
首先你动态创建好你的ddddw,假设名称为dddw_1

datawindowchild ldwc_1
dw_1.Modify("字段名.dddw.Name='dddw_1'")
dw_1.getchild('字段名', ldwc_1)
ldwc_1.settransobject(sqlca)
ldwc_1.retrieve()

dddw的内容已经改变了,我已经试过了OK!
konrong 2002-11-12
  • 打赏
  • 举报
回复
我还是原来的建议,数据窗口用动态生成,然后读出它的DATAOBJECT,比如是SS
那么用以下语句:
ls_sql="select * from "+bm//BM是变量
ls_syn=mysqlca.syntaxfromsql(ls_sql,"style(type=grid)",ls_error)
dw_1.create(ls_syn,ls_error2)
commit using mysqlca;
dw_1.settransobject(mysqlca)
dw_1.retrieve()
string ls_return,ls_text
textc ='create text(band=foreground alignment="0" text=""+ls_text+ border="0" color="0" x="0" y="0" height="184" width="100" name=t_title1 font.face="Arial" font.height="-11" font.weight="400" font.family="2" font.pitch="2" font.charset="0" background.mode="2" background.color="16777215" )'
dw_1.modify(textc)
textc='create text(band=foreground alignment="2" text="'+ls_text+'" border="0" color="0" x="10" y="28" height="68" width="613" name=t_title2 font.face="宋体" font.height="-11" font.weight="700" font.family="0" font.pitch="2" font.charset="134" font.underline="1" background.mode="2" background.color="16777215" )'
dw_1.modify(textc)
textc='create text(band=foreground alignment="2" text="'+ls_text+'" border="0" color="0" x="10" y="28" height="68" width="613" name=t_page font.face="宋体" font.height="-11" font.weight="700" font.family="0" font.pitch="2" font.charset="134" font.underline="1" background.mode="2" background.color="16777215" )'
dw_1.modify(textc)
dyo=dw_1.dataobject
ls_return=dw_1.modify(textc)
if ls_return<> '' then
messagebox("不能建立标签",ls_return)
end if


// dw_sgd1.Object.ljth.dddw.Name = 'DYO'//用做DDDW的DW的名字
//dw_sgd1.object.ljth.edit.case = 'any'
//dw_sgd1.Object.ljth.dddw.DisplayColumn = 'ljth'//用做DDDW的显示列的名字
//dw_sgd1.Object.ljth.dddw.DataColumn = 'ljth'//用做DDDW的数据列的名字
//dw_sgd1.Object.ljth.dddw.PercentWidth = 150 //DDDW显示宽度
//dw_sgd1.Object.ljth.dddw.Lines = 20 //DDDW显示行数
//dw_sgd1.Object.ljth.dddw.Limit = 0 //输入字符限制
//dw_sgd1.Object.ljth.dddw.AllowEdit = TRUE //允许输入
//dw_sgd1.Object.ljth.dddw.HScrollbar = TRUE //自动水平滚动
//dw_sgd1.Object.ljth.dddw.UseAsBorder = TRUE //是否显示右侧下箭头
////dw_sgd1.Object.ljth.dddw.Case = 0 //输入字符类别
//dw_sgd1.Object.ljth.dddw.VScrollBar = TRUE //DDDW显示垂直滚动条
hzhxxx 2002-11-12
  • 打赏
  • 举报
回复
请回答的人仔细看看别人的回答,不要盲目!
shuyf2000 2002-11-12
  • 打赏
  • 举报
回复
可以定义一个DropDown的自定义事件,用Return 1 来取消系统的弹出项,在return 1 前面写你的代码就行了!
andyzq 2002-11-12
  • 打赏
  • 举报
回复
动态创建数据窗原理及实现
http://www.liulee.net/topics/topic_open.php?id=012
hzhxxx 2002-11-11
  • 打赏
  • 举报
回复
//我现在只有不能修改子数据窗口的取数语法了,



下栽,超市连锁店管理系统(NEW)
hzhxxx 2002-11-11
  • 打赏
  • 举报
回复
//那时因为我要做一个通用的下拉选择数据的用户对象,这个用
//户对象的基本要求如下 :
//1. 能对任意需要下拉选择数据的字段进行简单的设置就可以了

//简单到你只要用户在他做好的数据窗口对象的指定地点(如 column.tag)
//指定 子数据窗口要从哪个表取数据,子数据窗口的数据列和显示列

//eg : columnx.tag = 'select mc,dm from table1 ',那列 columnx 就可以自动下拉
//各位可以到 www.saimsoft.com 中去看看
加载更多回复(18)

1,075

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 相关问题讨论
社区管理员
  • 基础类社区
  • WorldMobile
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧