CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  ASP.NET

一个关于treeview的难题,高人一定要进来!

楼主chinapro(Nothing But VB.Net)2002-10-04 00:39:32 在 .NET技术 / ASP.NET 提问

在一个窗体中包含两个treeview控件。一个treeview控件的内容通过递归算法从一个表中取得,第二个控件的内容根据用户在第一个控件中选择的内容确定。  
   
  表名为cdqj(菜单全集)表结构如下:  
  id(序号):                           主键,自增字段  
  cc(层次):                     varchar,每两位代表一个层次,每个层次可能包括多个子层次  
  ccmc(层次名称):         varchar  
  bleaf(是否为叶节点):   bit  
   
  示例数据  
  序号           层次                     名称                                         叶节点  
  1                 01                         dotNet图书                               否  
  2                 0101                     Asp.net                                     是  
  3                 0102                     VB.Net                                       否  
  4                 010201                 WinForm(VB)                             是  
  5                 010202                 WebForm(VB                               是  
  6                 0103                     C#                                               否  
  7                 010301                 WinForm(C#)                             是  
  8                 010302                 WebForm(C#)                             是  
   
  通过递归算法treeview1的内容如下  
  +根节点  
  |--dotNet图书  
      |--Asp.Net  
      |--VB.Net  
          |--WinForm(VB)  
          |--WebForm(VB)  
      |--C#  
          |--WinForm(C#)  
          |--WebForm(C#)  
   
  1.此时当用户双击WinForm(VB)节点时,须完成如下功能  
  treeview2由初始状态  
  +根节点  
   
  自动变为  
  +根节点  
  |--dotNet图书  
      |--VB.Net  
          |--WinForm(VB)  
   
  2.此时若用户继续双击treeview1中的WinForm(VB)节点时,treeview2应保持内容不变化  
   
  3.若此时用户双击treeview1中的C#节点时,treeview2应该变为  
   
  +根节点  
  |--dotNet图书  
      |--VB.Net  
          |--WinForm(VB)  
      |--C#  
          |--WinForm(C#)  
          |--WebForm(C#)  
  总结:当用户在treeview1中双击叶节点时,需要将该叶节点以及该叶节点的所有父节点加入到treeview2中(当然,父节点不能被重复加入,如例2);当用户在treeview1中双击非叶节点时,该节点的所有子节点和父节点均应加入treeview2中(如例三)。  
   
  我看了一下论坛中有关treeview的问题,大都集中在如何处理一个treeview控件的问题,有那位高人能够实现以上有关两个treeview控件的算法,本人将不胜感激。  
   
   
   
  附件:填充treeview1的递归算法  
          Private   Sub   Page_Load(ByVal   sender   As   System.Object,   ByVal   e   As   System.EventArgs)   Handles   MyBase.Load  
                  'Put   user   code   to   initialize   the   page   here  
                  If   Not   IsPostBack   Then  
                          Me.FillTreeView()  
                  End   If  
          End   Sub  
   
          Private   Sub   FillTreeView()  
                  Dim   root   As   New   TreeNode()  
                  root.Text   =   "根节点"  
                  root.ImageUrl   =   "./images/bs.gif"  
                  root.ExpandedImageUrl   =   "./images/bo.gif"  
                  Me.tvGNQJ.Nodes.Add(root)  
                  Me.tvGNQJ.ExpandLevel   =   1  
                  '通过递归算法填写treeview  
                  GetChild(2,   "*",   root.Nodes)  
          End   Sub  
   
          '递归调用,填充Treeview  
          'ccLength   --子节点层次字段长度  
          'strPatten   --父节点层次字段内容  
          'nodes           --节点集合  
          Private   Sub   GetChild(ByVal   ccLength   As   Integer,   ByVal   strPatten   As   String,   ByVal   nodes   As   TreeNodeCollection)  
                  Dim   cn   As   OleDbConnection  
                  Dim   cm   As   OleDbCommand  
                  Dim   strSql   As   String  
                  Dim   dr   As   OleDbDataReader  
                  Static   Dim   i   As   Integer  
   
                  cn   =   New   OleDbConnection(ConfigurationSettings.AppSettings("cnstr"))  
                  cn.Open()  
   
                  If   i   =   0   Then  
                          '第一次进入的语句  
                          strSql   =   "select   *   from   cdqj   where   len(cc)="   &   ccLength  
                          i   +=   1  
                  Else  
                          '以后进入的语句  
   
                          '父节点层次长度  
                          Dim   pLength   As   Integer  
                          pLength   =   ccLength   -   2  
                          strSql   =   "select   *   from   cdqj   where   len(cc)="   &   ccLength   &   "   and   left(cc,"   &   pLength   &   ")="   &   strPatten  
                  End   If  
                  cm   =   New   OleDbCommand(strSql,   cn)  
                  dr   =   cm.ExecuteReader()  
                  While   dr.Read  
                          Dim   node   As   New   TreeNode()  
                          node.Text   =   dr("ccmc")  
                          '是否为叶节点  
                          If   dr("bleaf")   Then  
                                  '是  
                                  node.ImageUrl   =   "./images/dc.gif"  
                          Else  
                                  '否  
                                  node.ImageUrl   =   "./images/bs.gif"  
                                  node.ExpandedImageUrl   =   "./images/bo.gif"  
                          End   If  
                          '将当前节点加入节点集合  
                          nodes.Add(node)  
                          '递归调用  
                          GetChild(ccLength   +   2,   dr("cc"),   node.Nodes)  
                  End   While  
                  cn.Close()  
          End   Sub  
  问题点数:100、回复次数:7Top

1 楼sheyanfen(星宇)回复于 2002-10-04 08:48:26 得分 1

1、生成第一个TreeView  
  2、点击第一个TreeView时,动态生成第二个TreeView,只要取得当前点击节点的父及子,然后将它们添加到第二个TreeView中,就可以实现你所说的操作了。Top

2 楼chinapro(Nothing But VB.Net)回复于 2002-10-04 11:05:32 得分 0

能否再具体一点?谢了!Top

3 楼zhaixd()回复于 2002-10-04 16:36:41 得分 59

你的算法效率不高,应该使用数据集,这样可以避免递归调用时查询数据库  
   
  生成第一个树是由父节点到子节点进行递归  
  生成第二个树可由子节点到父节点进行递归  
  Top

4 楼chinapro(Nothing But VB.Net)回复于 2002-10-05 20:27:49 得分 0

zhaixd谢谢,我也意识到应该用dataset来做。能否指出如何获得当前节点的父节点?Top

5 楼chinapro(Nothing But VB.Net)回复于 2002-10-08 09:05:19 得分 0

问题还没有解决啊!Top

6 楼sheyanfen(星宇)回复于 2002-10-08 09:10:28 得分 40

取得当前节点父节点的Text  
  ((TreeNode)mytree.GetNodeFromIndex(mytree.SelectedNodeIndex).Parent).Text;Top

7 楼chinapro(Nothing But VB.Net)回复于 2002-10-08 09:14:47 得分 0

Thanks!,sheyanfen.但是如何解决两个treeview之间移动node的问题呢?Top

相关问题

  • TreeView的难题
  • treeview的难题?在线等,解决即给分
  • 难题中的难题,考考高人们`
  • 救命啊!紧急难题,好象还很烦琐,达人们救命!分一定给!
  • =========难题。难题======
  • 天啊!有人帮我吗?难题?
  • 面向对象难题,闲人请进
  • javascript 读xml难题!请高人帮忙。
  • 大难题了,请高人帮忙
  • 难题!!!请教各位高人!!!

关键词

  • asp.net
  • c#
  • vb.net
  • 节点
  • 算法
  • winform
  • 控件
  • 字段
  • vb
  • webform

得分解答快速导航

  • 帖主:chinapro
  • sheyanfen
  • zhaixd
  • sheyanfen

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

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