CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  PowerBuilder >  基础类

高手帮忙啊,问一个关于treeview的简单问题!!!!!!!!!!!!!!!!!!!!!!!!!!在线等待!!

楼主pb2005(无名小卒)2004-08-03 17:39:10 在 PowerBuilder / 基础类 提问

表的字段为  
  ID             NAME                 FULLPATH  
  **************************  
  001             海运出口一       HYCK.CK1  
  002             第一组             HYCK.CK1.CK11  
  003             第二组             HYCK.CK1.CK12  
  004             海运出口二     HYCK.CK2  
  005             财务部             CW  
  006             财务一部         CW.TR  
  007             海运出口部     HYCK  
  008             电脑部             IT  
  *************************  
  在窗体OPEN的时候,我想让树以下面的形式展开  
  *************************************  
  -财务部  
          财务一部  
  -电脑部  
  -海运出口部  
          -海运出口一  
                  第一组  
                  第二组  
          海运出口二  
  ************************************  
  树的层数是不固定的,好象应该用循环递归,哪位高手帮小弟写一下代码好吗,谢谢!!!!!!!!!!! 问题点数:0、回复次数:32Top

1 楼klbt(快乐白兔)回复于 2004-08-03 19:44:50 得分 0

树的层数是不固定的,所以你缺少一个层次列,或者用编码表达层次。Top

2 楼pb2005(无名小卒)回复于 2004-08-04 09:42:36 得分 0

上面所列举的数据只是一部分,那些部门是在另一个窗口里添加的,数据表已经固定了,不可能再加一个字段,高手们帮忙啊Top

3 楼pb2005(无名小卒)回复于 2004-08-04 10:03:03 得分 0

upTop

4 楼pb2005(无名小卒)回复于 2004-08-04 10:16:14 得分 0

up  
  Top

5 楼js00224(无名小卒)回复于 2004-08-04 10:20:48 得分 0

可以根据字段   “FULLPATH”字段来建树.用递归循环做.  
  先建个DATASTORE,然后从DATASTORE里提取数据,利用字符串函数,寻找到第一层,不包含“.“的字段,然后递归调用,寻找第二层的,以此类推,应该可以建出来。例如  
  建立一个窗口函数       tree_additem()//参数可以设置,或不可设置,根据具体的情况而定  
  datastore   datatree  
  datatree   =   create   datatree  
  datatree.dataobject   =   '数据窗口名'  
  datatree.settransobject(sqlca)  
  datatree.retrieve  
  long   ll_count  
  for   ll_count   =   1   to   datatree.rowcount()  
        中间过程简单,自己可以搞定的  
  next  
  post   tree_additem()Top

6 楼pb2005(无名小卒)回复于 2004-08-04 10:27:06 得分 0

谢谢楼上大哥指点,大概思路我知道的,但代码怎么写啊,大哥,你可不可以帮我写一下啊??????Top

7 楼pb2005(无名小卒)回复于 2004-08-04 10:41:37 得分 0

upTop

8 楼pb2005(无名小卒)回复于 2004-08-04 10:57:05 得分 0

up  
  Top

9 楼jp2k(深蓝)回复于 2004-08-04 11:08:16 得分 0

表的字段为  
  ID             LEVELNAME                 FULLPATH  
  **************************  
  001             海运出口一       HYCK.CK1  
  002             第一组             HYCK.CK1.CK11  
  003             第二组             HYCK.CK1.CK12  
  004             海运出口二     HYCK.CK2  
  005             财务部             CW  
  006             财务一部         CW.TR  
  007             海运出口部     HYCK  
  008             电脑部             IT  
  *************************Top

10 楼jp2k(深蓝)回复于 2004-08-04 11:10:45 得分 0

建议分级,个体做法:  
  表的字段改为  
  ID             LEVEL         NAME                 FULLPATH  
  **************************  
  001             2               海运出口一       HYCK.CK1  
  002             3               第一组             HYCK.CK1.CK11  
  003             3               第二组             HYCK.CK1.CK12  
  004             2               海运出口二     HYCK.CK2  
  005             1               财务部             CW  
  006             2               财务一部         CW.TR  
  007             1               海运出口部     HYCK  
  008             1               电脑部             IT  
  *************************Top

11 楼pb2005(无名小卒)回复于 2004-08-04 11:14:37 得分 0

不可能改表的结构啊,而且级别也不固定,肯定要用递归遍历的,可我数据结构没学好,不知道怎么写这样的算法啊Top

12 楼tiantanglyz(wuyou88)回复于 2004-08-04 11:19:54 得分 0

再加点分我帮你写!Top

13 楼pb2005(无名小卒)回复于 2004-08-04 11:42:42 得分 0

好的,分不是问题,可是我这个帐号的分就剩下10分了,等问题搞定后,我多申请几个ID号,然后给你好吗,我现在好着急啊,我绝不食言Top

14 楼Hanson_bati_zhu(欺世盗名之徒)回复于 2004-08-04 11:59:54 得分 0

楼主如果用的是PFC就比较简单了  
  这棵树用PFC中的u_tvs很好实现  
  Top

15 楼pb2005(无名小卒)回复于 2004-08-04 12:10:44 得分 0

可惜我用的不是PFC啊Top

16 楼mmkill(蒙松雨kill)回复于 2004-08-04 12:36:17 得分 0

很简单,就是用递归,我写过一个。可惜你给的分太少Top

17 楼pb2005(无名小卒)回复于 2004-08-04 12:59:05 得分 0

我说过了,我现在就剩下10分了,等问题一解决,我一定另外再给你分   的Top

18 楼pb2005(无名小卒)回复于 2004-08-04 13:09:16 得分 0

upTop

19 楼pb2005(无名小卒)回复于 2004-08-04 13:25:55 得分 0

upTop

20 楼tiantanglyz(wuyou88)回复于 2004-08-04 14:09:14 得分 0

好!  
  我开始帮你写了!Top

21 楼pb2006()回复于 2004-08-04 14:18:56 得分 0

好的,把代码贴在下面的帖子里,我给了100分  
  http://community.csdn.net/Expert/topic/3241/3241493.xml?temp=.2543909Top

22 楼pb2005(无名小卒)回复于 2004-08-04 15:08:47 得分 0

各位高手,我已经开了100分的帖子啊,http://community.csdn.net/Expert/topic/3241/3241493.xml?temp=.2543909  
  Top

23 楼pb2006()回复于 2004-08-04 16:15:17 得分 0

我出了100分怎么没人回答呢?????????????????????Top

24 楼pb2006()回复于 2004-08-04 17:12:51 得分 0

我顶!!!!!!!!!!!!Top

25 楼sun1976(嫁给我,你就是我的一妾)回复于 2004-08-04 17:21:15 得分 0

数据存储:  
  select   id,name   ,FULLPATH,1   as   level  
  from   talble  
   
  //窗口函数:  
  uf_get_level()//参数:string   as_code  
  //返回:long   ll_level  
  long   ll_level  
  long   ll_pos  
  ll_level=1  
  ll_pos=pos(as_code,'.')  
  do   while   ll_pos>0  
        ll_level++  
        ll_pos=pos(as_code,'.',ll_pos+1)  
  loop  
  return   ll_level  
   
  //树的数据  
  lds_1.retrieve()  
  for   i=1   to   lds_1.rowcount()  
  ls_code=lds_1.getitemstring(i,'FULLPATH')  
  lds_1.setitem(i,'level',uf_get_level(ls_code))  
  next  
  uf_draw_tv(0,0,'',lds_1)  
   
  //树绘制函数uf_draw_tv(long   al_parenthandle,long   al_parentlevel,string    
   
  as_parentcode,datastroe   ads_1)  
  treevievitem   ltv_1  
  long   ll_newhandle  
  long   ll_newlevle  
  string   ls_newcode  
  //设置图片等属性  
  ltv_1.xxxxx=xxx  
  //------------  
  ll_newlevel=al_parentlevel+1  
  ads.setfilter("(FULLPATH   like   '"+as_parentcode+"%')   and   leve="+string(ll_newlevel))  
  ads.filter()  
   
  for   i=1   to   ads_1.rowcount()  
  ltv_1.data=ads.getitemstring(i,'FULLPATH')  
  ltv_1.label=ads_1.getitemstring(i,'name')  
  ll_newhandle=tv_1.InsertItemLast   (   al_parenthandle,   ltv_1   )  
  uf_draw_tv(ll_newhandle,ll_newlevel,ltv_1.data,ads_1)  
  next  
   
   
  //说明:所有函数的所有参数都用值传递[value]  
  Top

26 楼liujiaqiang(阿毛)回复于 2004-08-04 17:37:55 得分 0

//-----------------------------------------------------------------  
  //         功能:把数据窗口中的记录以节点加入树形中  
  //         参数:1.al_handle           要加入的父节点句柄   就是你的FULLPATH  
  //                   2.al_parent_id     要加入的父节点号  
  //     返回值:1.true       加入完毕正常展开    
  //                   2.false     数据窗口中没有要加入的节点或加入中出现错误  
  //-------------------------------------------------------------------  
    istr_pass   是一个结构,含有l1,s1,l2,s2,l3,s3等一些属性。  
   
  treeviewitem     ltvi_new  
  integer               li_rowcount  
  integer               li_i  
  string                 ls_name  
   
  datastore   ds_1  
  ds_1   =   create   datastore    
  ds_1.dataobject   =   "数据窗口对象"  
  ds_1.settransobject(sqlca)  
  li_rowcount   =   ds_1.retrieve(al_parent_id)  
  if   li_rowcount   =   0   or   isnull(li_rowcount)   then   return   false  
   
  //开始在树形中加入节点  
  for   li_i   =   1   to   li_rowcount    
  ls_name   =   ds_1.object.name[li_i]  
  ltvi_new.label   =   ls_name  
  ltvi_new.pictureindex   =   2  
        ltvi_new.selectedpictureindex   =   3  
        istr_pass.pass_l1   =   ds_1.object.id[li_i]  
        istr_pass.pass_s1   =   ls_name  
        istr_pass.pass_l2   =   al_parent_id  
        istr_pass.pass_s2   =   ds_1.object.parent_path[li_i]  
        istr_pass.pass_s3   =   ds_1.object.remark_memo[li_i]  
  If   this.event   ue_has_children(istr_pass.pass_l1)   Then  
  ltvi_new.Children   =   True  
  Else  
  ltvi_new.Children   =   False  
  End   If  
        ltvi_new.data   =   istr_pass  
  if     not(tv_1.insertitemlast(al_handle,ltvi_new)   >   0)   then   return   false  
  next  
  this.setredraw(true)  
  return   true  
   
   
  //-------------------------------------------  
  //   名称:ue_has_children  
  //   功能:   一个区域下面是否还有下属区域  
  //   参数:   al_area_id     FULLPATH   ,   其格式例为:‘HYCK.CK1%’  
  //   返回:   boolean     true     有下级区域  
  //                                 false   没有下级区域  
  //--------------------------------------------  
   
  long   ll_count  
   
  ll_count   =   0    
  SELECT   count(T_Area.ID)  
  INTO   :ll_count  
  FROM   表  
  WHERE   表.FULLPATH   like   :al_area_id   using   sqlca     ;  
  if   sqlca.sqlcode   =   0   and   ll_count   >   0   then  
        commit   using   sqlca;  
  return   true  
  else  
  rollback   using   sqlca;  
  return   false  
  end   ifTop

27 楼liujiaqiang(阿毛)回复于 2004-08-04 17:39:09 得分 0

如果实在还搞不定,给个E-Mail   ,我穿一个例子给你。Top

28 楼sun1976(嫁给我,你就是我的一妾)回复于 2004-08-05 10:16:01 得分 0

liujiaqiang(阿毛)  
  研究研究,跟你学两招  
  你的ds_1的数据窗口对象怎么定义的,贴出来好不好?Top

29 楼liujiaqiang(阿毛)回复于 2004-08-05 12:36:31 得分 0

SELECT     ID       ,       NAME         ,         FULLPATH          
                  FROM   表      
                  WHERE   (   FULLPATH   like   :al_parent_id   )Top

30 楼pb2005(无名小卒)回复于 2004-08-05 13:00:17 得分 0

TO     sun1976(关羽观雨)   :您写的不对啊,只能把2条记录检索出来,后面的没有了Top

31 楼sun1976(嫁给我,你就是我的一妾)回复于 2004-08-05 16:01:38 得分 0

到楼主开的另外那个贴子找去  
  在函数里create一个数据存储lds,取传入的数据存储的dataobject,然后rowscopy所有数据,然后过滤lds,用lds画节点  
  Top

32 楼tiantanglyz(wuyou88)回复于 2004-08-11 10:52:56 得分 0

不好意思,早两天出差了,昨天才回来  
  刚刚已写玩,而且经过了测试  
  你要的话就加我qq:279393842  
  或E_Mail:homerlyz@yahoo.com.cn  
  全天在线Top

相关问题

  • treeview问题,在线等待
  • TreeView刷新问题?在线等待......
  • TreeView 的拷贝问题--在线等待
  • treeview的使用方法?在线等待!
  • 关于treeview的pic-------在线等待
  • recordset的问题(简单)在线等待
  • 在线等待~~~ 简单问题
  • 一个简单问题。(在线等待.....)
  • 简单问题,高分,在线等待..
  • 简单问题,在线等待!

关键词

  • .net
  • 字段
  • 数据
  • hyck
  • ck
  • 海运出口
  • datatree
  • 递归
  • 高手
  • 财务

得分解答快速导航

  • 帖主:pb2005

相关链接

  • PowerBuilder类图书
  • PowerBuilder类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo