请教treeview的递归生成

xhzlhc 2011-12-13 01:20:05
addchild(long handle1)
long li_i1,li_len,li_len2,ii_xx,li_count
string tmp
treeviewitem tvi
tv_info.getitem(handle1,tvi)
li_len = len(string(tvi.data))
li_len2 = li_len +2
tmp = "len(trim(dept_code)) = " +string(li_len2)+" and &
left(dept_code,"+string(li_len)+") = '"+string(tvi.data)+"'"
dw_temp.setfilter(tmp)
dw_temp.filter()
dw_temp.setsort("#1 A")
dw_temp.sort()
li_count = dw_temp.rowcount()
//messagebox("",li_count)
if (li_count >=1) then
for li_i1=1 to li_count
// tvi.data = dw_temp.getitemstring(li_i1,"dept_code")
// tvi.label = dw_temp.getitemstring(li_i1,"dept_name")
tvi.data = dw_temp.object.dept_code[li_i1]
tvi.label = dw_temp.object.dept_name[li_i1]
ii_xx=tv_info.insertitemlast(handle1,tvi)
// messagebox("",tvi.label)
addchild(ii_xx)
tv_info.getitem(ii_xx,tvi)
// messagebox("",tvi.label)
next
end if
return


注明: 如果把自调用屏蔽了完全没问题,一用自调用就出错
错误出现在 tvi.data = dw_temp.getitemstring(li_i1,"dept_code") 这段


---------------------------
PowerBuilder Application Execution Error (R0039)
---------------------------
Application terminated.

Error: Error accessing external object property dept_code at line 20 in function addchild of object w_1.
---------------------------
确定
---------------------------


整了一晚上,没法了,各位老大 给点思路吧
...全文
126 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
xhzlhc 2011-12-22
  • 打赏
  • 举报
回复
楼上的哥们厉害啊,我开始想到过是递归dw出的问题,但是只有个模糊的东西,谢谢你啊
分给你了
guozhi201 2011-12-15
  • 打赏
  • 举报
回复
我看楼上说的都不对,问题应该就出在你的数据窗口dw_temp:
第一层的时候是没问题,但是当进入递归自己调用自己的时候,你就把dw_temp重新filter过了,所以,他递归出来返回上一层的时候,dw_temp的数据已经被你改变过了,不能返回。楼主细心想下这个思路先啦,至于解决办法,我相信你可以的。。。。。。。。还不懂的邮件这个qq253794849。。。记得给分!!!
ribut9225 2011-12-14
  • 打赏
  • 举报
回复
那么,问题就是出现在递归时
只能断点跟踪一下,看看问题是在第几层
路人甲cw 2011-12-13
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 xhzlhc 的回复:]

你们说的我试了,没对 我不要自调用完全没问题的
还是谢谢了
[/Quote]
你上面的代码是写在GetItemString()函数里的?
xhzlhc 2011-12-13
  • 打赏
  • 举报
回复
你们说的我试了,没对 我不要自调用完全没问题的
还是谢谢了
ribut9225 2011-12-13
  • 打赏
  • 举报
回复
tvi.data = dw_temp.getitemstring(li_i1,"dept_code")

////////////////////////////

不能直接取数据窗口的值赋给data,需要使用一个临时变量

string ls_temp

ls_temp = dw_temp.getitemstring(li_i1,"dept_code")
tvi_data = ls_temp

xuam 2011-12-13
  • 打赏
  • 举报
回复
dw_temp 的列名有没有dept_code ?是不是弄错了?
PB菜鸟 2011-12-13
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 ribut9225 的回复:]

tvi.data = dw_temp.getitemstring(li_i1,"dept_code")

////////////////////////////

不能直接取数据窗口的值赋给data,需要使用一个临时变量

string ls_temp

ls_temp = dw_temp.getitemstring(li_i1,"dept_code")
tvi_data……
[/Quote]

611

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder DataWindow
社区管理员
  • DataWindow社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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