关于Grid风格DW中Child DataWindow的刷新问题

am2000 2004-07-08 02:40:32
我希望从大类中过滤后选择记录:
我在ItemChanged中写如下代码:
String ls_exam_kind
If row<=0 Then Return
IF dwo.name='exam_kind' THEN
DataWindowChild ldwc_data
integer rtncode
ls_exam_kind=String(data)
rtncode = This.GetChild('kind_code', ldwc_data)
IF rtncode = -1 THEN MessageBox("Error", "Not a DataWindowChild")
ldwc_data.SetTransObject(SQLCA)
ldwc_data.Retrieve()
ldwc_data.SetFilter("Left(code,2)='"+ls_exam_kind+"'")
ldwc_data.Filter()
END IF
结果选择时,其他行只显示编码,不显示名称。
...全文
317 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
softwarewl 2004-07-09
  • 打赏
  • 举报
回复
告诉你吧就是DDDW不允许出理重名的,
这样,
你用弹出的数据窗口,打开时先把查询条件传过去,在弹出的数据窗口中选中后,然后再把数据附回来,对了,在你原来的数据窗口中加个伪列,让伪列显示名称,实列附上代码。
反正出了这样的问题我是这么做的
am2000 2004-07-09
  • 打赏
  • 举报
回复
邮件收到,谢谢!
马上要出去!
回头再看

Hanson_bati_zhu 2004-07-09
  • 打赏
  • 举报
回复
邮件已经发出,请查收

随信附带了一个小例子,用PB8写的,数据库用的ACCESS。
你需要建立一个ODBC数据源,数据源名是dddwtest,数据源类型是ACCESS(.MDB)

例子很简单,东西不多,但应该能够看出效果来
对DDDW的动态过滤,可以放在DropDown事件中处理,能省很多事的

试试看,希望对你能有所帮助
am2000 2004-07-09
  • 打赏
  • 举报
回复
你的两个QQ是不是都不用了.
我的邮件:newam@163.com
---------------------------------------------
我基本上已经搞定了,但是实现起来麻烦,
首先,要通过code取出name的值.赋到伪列.
然后在ItemFocusChaned中要写代码,防止第一次选择ItemChanged不触发取不到Child DW;
最后在ItemChanged中写代码通过Child DW取出code;
---------------------------------------------
我这里code是使用
ls_kind_code=idwc_data.GetItemString(idwc_data.GetRow(),"code")
取出来的,这样好象能够解决重名的问题;
不知道行不行;
---------------------------------------------
renwanly(◆〓▲) :使用你的方法,当选择当前小类时,已选中的项目好象也在DDDW中.
Hanson_bati_zhu 2004-07-09
  • 打赏
  • 举报
回复
这么取ls_kind_code确实是个好办法
不错不错
am2000 2004-07-09
  • 打赏
  • 举报
回复
to Hanson_bati_zhu(欺世盗名之徒) :基本搞定;
我在ItemChanged中是这么写的,好象也行;你看一下有没有什么问题.

STRING ls_exam_kind,ls_exam_name,ls_ID,ls_kind_code
LONG ll_Find,ll_Count,ll_Index,li_data_row
THIS.GetChild('exam_name',idwc_data)
THIS.AcceptText()
CHOOSE CASE Upper(dwo.Name)
CASE 'EXAM_KIND'
ls_exam_kind = THIS.GetItemString(row,'exam_kind')
THIS.SetItem(row,'exam_name','')
idwc_data.SetFilter("Left(code,2)='"+ls_exam_kind+"'")
idwc_data.Filter()
CASE 'EXAM_NAME'
li_data_row=idwc_data.GetRow()
IF li_data_row<=0 THEN RETURN
ls_kind_code=idwc_data.GetItemString(li_data_row,"code")
This.SetItem(row,'kind_code',ls_kind_code)

END CHOOSE
THIS.AcceptText()

Hanson_bati_zhu 2004-07-08
  • 打赏
  • 举报
回复
还没搞定呢?
笨笨,呵呵。
刚刚忙完手头的活(NND,闲了一白天,到了下班却忙起来了,Faint!),得回家了,我晚上在家里给你作个小例子吧
明天早上发邮件给你
你看到这个回贴,把邮箱留下,我以前的通讯录搞丢了

又下雨了,晕啊,赶紧回家了


renwanly 2004-07-08
  • 打赏
  • 举报
回复
这个问题我是这样解决的:
封装一个函数,每次调用共享都在一个datastore数组中加入一个,将所有数据复制过去,也不算麻烦,千万别告诉别人这个方法呦:D
am2000 2004-07-08
  • 打赏
  • 举报
回复
当不选择exam_kind的时候有问题.
mittee 2004-07-08
  • 打赏
  • 举报
回复
这种情况肯定是data column和 display column 没有对应上,
不是很麻烦
am2000 2004-07-08
  • 打赏
  • 举报
回复
String ls_exam_kind ,ls_exam_code,ls_kind_code
Integer rtncode
If row<=0 Then Return
IF dwo.name='exam_kind' THEN
ls_exam_kind=String(data)
rtncode = This.GetChild('compute_0004', idwc_data)
IF rtncode = -1 THEN MessageBox("Error", "Not a DataWindowChild")
idwc_data.SetTransObject(SQLCA)
idwc_data.Retrieve()
idwc_data.SetFilter("Left(code,2)='"+ls_exam_kind+"'")
idwc_data.Filter()
ELSEIF dwo.name='compute_0004' THEN
ls_kind_code=idwc_data.GetItemString(idwc_data.GetRow(),"code")
This.SetItem(row,'kind_code',ls_kind_code)
END IF
am2000 2004-07-08
  • 打赏
  • 举报
回复
将名称加上很长的空格串再加上代码作为显示用的名称后,data值只显示name
am2000 2004-07-08
  • 打赏
  • 举报
回复
我是真的遇到了问题.
宝刀是越来越锋利了!
Hanson_bati_zhu 2004-07-08
  • 打赏
  • 举报
回复
KAO!
你小子是真的遇到问题了还是故意考我啊?
怕了你了!

8-)
am2000 2004-07-08
  • 打赏
  • 举报
回复
服了你了!
Hanson_bati_zhu 2004-07-08
  • 打赏
  • 举报
回复
麻烦了。。。。
8-(

看看这样行不行,你的这个DDDW不需要“Allow Editing”吧
如果不用这个功能就有办法了
这样,在建这个DDDW用的数据窗口时,将名称加上很长的空格串再加上代码作为显示用的名称
这样就能够解决名称重复的问题了,不过,这个空格串需要比较长才行,要不然用户一拖动分隔条就露馅了,呵呵
killerdanny 2004-07-08
  • 打赏
  • 举报
回复
你把同样的过滤条件同样的过滤一下主DW。本来你过滤的目的就是隐藏一些不符合条件的行。
swordmanli 2004-07-08
  • 打赏
  • 举报
回复
最简单就是换种方法!
1,用弹出窗口
2,用另外一个datawindow,你控制它显示和隐藏就好了
am2000 2004-07-08
  • 打赏
  • 举报
回复
名称有重复的!
Hanson_bati_zhu 2004-07-08
  • 打赏
  • 举报
回复
这个额外增加的列最好用一个伪列,并且设置宽度长些,因为一般代码都要比名称内容短的
加载更多回复(3)

1,076

社区成员

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

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