首页   |   IT资讯   |   综合资讯   |   开发   |   软件   |   问答   |   网络技术   |   网络综合
更多:
当前位置:首页 » 手机数码
文章正文

急!菜鸟问TreeView控件如何使用?

类型:转载   责任编辑:asp   日期:2007/03/01

    

rt,在.net中不知设什么地方让treeview显示出来,如果用xml,xml该如何写?

推荐阅读

  • 炫音魅色 索尼NW-A1000深入评测 [详细内容]
  • 比1U更轻薄 浪潮支持双路至强16800元 [详细内容]
  • 英特尔启动低价PC计划 具体价格尚未确定 [详细内容]
  • 理性分析 笔记本电池标称时间的背后 [详细内容]
  • 女人如花女人如画 冷艳也动人 图赏 [详细内容]
  • 7000元CPU也是奖品?技嘉975X超频大赛 [详细内容]
  • 820之极速移动梦网(GPRS) [详细内容]
  • 网友回答:
    网友:mulanos

    到这个地址试试  
      http://asp2.6to23.com/lg12net/download.htm下面

    网友:lihonggen0

    树形图用于显示按照树形结构进行组织的数据,其用途比较广泛,如计算机中的文件系统(windows中的资源管理器)、企业或公司的组成结构等。我们知道在windows下vb、pb、delphi等工具提供了一个功能很强的树型控件treeview,利用treeview控件可以方便地开发树形图。然而在网页上实现树形图就不那么容易了,现在在asp.net中利用微软提供的internet   explorer   webcontrols它使得网页上的树形图开发与在windows下一样的方便,一样的功能强大,甚至更灵活。    
       
       
        本文介绍用internet   explorer   webcontrols开发树形图的方法,由于树形图结构较复杂,使用起来常不知如何下手。笔者结合最近刚为公司用asp.net编写的应用程序管理器这一具体实例,详细阐述在asp.net下如何将internet   explorer   webcontrols的使用与数据库联系起来,实现数据分任意多层显示,方便地进行增加、修改、删除、移动操作。笔者希望通过对该实例的阐述,达到抛砖引玉的效果,与各位同仁相互交流,共同进步。    
       
       
        internet   explorer   webcontrols不在vs.net的标准server   control中,要到微软的站点上下载,下载地址是:http://msdn.microsoft.com/downloads/samples/internet/default.asp?url=/downloads/samples/internet/asp_dot_net_servercontrols/webcontrols/default.asp   下载安装后第一次使用时,要右击工具箱customize   toolbox…→.net   framework   components中找到micosoft.web.ui.webcontrols.treeview后选中,这样treeview控件就出现在工具箱中了。    
       
       
        一、树的建立    
       
       
        具体方法是:创建一个数据库,设计树图信息表tree_info,包含nodeid、parentid、nodename、adderss、icon字段,其它字段根据实际业务而定,节点名称nodename将在树型控件的节点上显示,nodeid字段保存节点的唯一标识号,parentid表示当前节点的父节点号,标识号组成了一个“链表”,记录了树上节点的结构。设计一个web窗体其上放置treeview控件。  
       
       
           
      private   sub   createdataset()’建立数据集    
      dim   myconn   as   new   sqlconnection()    
      dim   mycmd   as   new   sqlcommand("select   nodeid,nodename,parentid,address,icon   from   tree_info",   myconn)    
      dim   mydataadapter   as   new   sqldataadapter()    
      myconn.connectionstring   =   application("connectstring")    
      mycmd.commandtext   =   ""    
      mycmd.connection   =   myconn    
      mydataadapter.selectcommand   =   mycmd    
      mydataadapter.fill(ds,   "tree")    
      end   sub    
       
       
        建树的基本思路是:从根节点开始递归调用显示子树    
       
       
      private   sub   page_load(byval   sender   as   system.object,   byval   e   as   system.eventargs)   handles   mybase.load    
      createdataset()    
      intitree(treeview1.nodes,   0)    
      end   sub    
      private   sub   intitree(byref   nds   as   treenodecollection,   byval   parentid   as   integer)    
      dim   dv   as   new   dataview()    
      dim   drv   as   datarowview    
      dim   tmpnd   as   treenode    
      dim   intid   as   integer    
      dv.table   =   ds.tables("tree")    
      dv.rowfilter   =   "parentid=’"   &   parentid   &   "’"    
      for   each   drv   in   dv    
      tmpnd   =   new   treenode()    
      strid   =   drv("node_id")    
      tmpnd.id   =   strid    
      tmpnd.text   =   drv("node_name   ")    
      tmpnd.imageurl   =   drv("icon").tostring    
      nds.add(tmpnd)    
      intitree(nds(nds.count   -   1).nodes,   intid)    
      next    
      end   sub      
      二、增加、删除树节点    
       
       
        单纯在treeview   上增加、删除、修改节点只需用nodes属性的add、   remove、等方法即可,值得注意的地方是vs.net中treeview的nodes集合与vs6.0中的区别,vs6.0中的是一个大的集合,而vs.net中的是分层的每个node下都有nodes属性。增加、删除、修改树节点时与vs6.0相比有很大差别,特别是删除时。  
       
       
      private   sub   butadd_click(byval   sender   as   system.object,   byval   e   as   system.eventargs)   handles   butadd.click’在选定的节点下添加子节点    
      dim   tmpnd   as   new   treenode(),   ndsel   as   treenode    
      tmpnd.id   =   getnewid()    
      ndsel   =   treeview1.getnodefromindex(treeview1.selectednodeindex)’选中的节点    
      tmpnd.text   =   "新节点"    
      ndsel.nodes.add(tmpnd)    
      dim   myrow   as   datarow    
      myrow   =   ds.tables("tree").newrow()    
      myrow("node_name")   =   tmpnd.id    
      myrow("node_descript")   =   "新节点"   &   tmpnd.id   &   "_"   &   ndsel.id    
      myrow("parent_name")   =   ndsel.id    
      ds.tables("tree").rows.add(myrow)    
      end   sub    
      private   sub   butdele_click(byval   sender   as   object,   byval   e   as   system.eventargs)   handles   butdele.click’删除选中的节点    
      dim   idx   as   string   =   treeview1.selectednodeindex()    
      getndcol(idx).remove(treeview1.getnodefromindex(idx))    
      dim   dv   as   new   dataview(),   recno   as   integer    
      dv.table   =   ds.tables("tree")    
      dv.rowfilter=   "nodeid="   &   ndid    
      dv.delete(0)    
      end   sub    
      private   function   getndcol(byval   idx   as   string)   as   treenodecollection    
      ‘获得选中节点的父节点的nodes集合    
      dim   cnt   as   integer,   i   as   integer    
      dim   tmpnds   as   treenodecollection    
      dim   idxs()   as   string    
      idxs   =   split(idx,   ".")    
      cnt   =   ubound(idxs)    
      if   cnt   =   0   then    
      tmpnds   =   treeview1.nodes    
      else    
      tmpnds   =   treeview1.nodes(cint(idxs(0))).nodes    
      for   i   =   1   to   cnt   -   1    
      tmpnds   =   tmpnds(cint(idxs(i))).nodes    
      next    
      end   if    
      return   tmpnds    
      end   function    
      三、修改、移动树节点    
       
       
        由于服务器控件不支持鼠标拖动事件,所以不能象windows程序那样通过拖动移动节点,这里是通过选择父节点的方式。移动是通过在原位置删除,新位置添加实现的,要注意在删除时先保存节点信息。    
       
       
      private   sub   treeview1_selectedindexchange(byval   sender   as   object,   byval   e   as   microsoft.web.ui.webcontrols.treeviewselecteventargs)   handles   treeview1.selectedindexchange    
      dim   dv   as   new   dataview()    
      dv.table   =   ds.tables("tree")    
      dim   tmpnd   as   treenode   =   treendsel(e.oldnode),   tmpnds   as   treenodecollection    
      dv.rowfilter=   "nodeid="   &   tmpnd.id    
      dv(0)("node_descript")   =   me.textbox1.text    
      dv(0)("address")   =   me.textbox2.text    
      dv(0)("target")   =   me.textbox3.text    
      dv(0)("icon")   =   me.textbox4.text    
      if   dv(0)("parentid").tostring   <>   me.dropdownlist1.selecteditem.value   then    
      ‘移动节点    
      dv(0)("parent_name")   =   me.dropdownlist1.selecteditem.value    
      if   me.dropdownlist1.selecteditem.value   =   "root"   then    
      tmpnds   =   treeview1.nodes    
      else    
      tmpnds   =   fromidtonode(me.dropdownlist1.selecteditem.value,   treeview1.nodes).nodes’新的父节点的nodes集合    
      end   if    
      getndcol(e.oldnode).remove(tmpnd)    
      tmpnds.add(tmpnd)    
      end   if    
      tmpnd.text   =   me.textbox1.text    
      tmpnd.imageurl   =   me.textbox4.text    
      tmpnd   =   treeview1.getnodefromindex(treeview1.selectednodeindex)    
      dv.rowfilter=   "nodeid="   &   tmpnd.id    
      me.textbox1.text   =   dv(0)("nodename").tostring    
      me.textbox2.text   =   dv(0)("address").tostring    
      me.textbox3.text   =   dv(0)("target").tostring    
      me.textbox4.text   =   dv(0)("icon").tostring    
      end   sub    
      private   function   fromidtonode(byval   id   as   string,   byval   nds   as   treenodecollection)   as   treenode    
      ‘由关键字查找节点    
      dim   i   as   integer    
      dim   tmpnd   as   treenode,   tmpnd1   as   treenode    
      for   each   tmpnd   in   nds    
      if   tmpnd.id   =   id   then    
      return   tmpnd    
      exit   function    
      end   if    
      tmpnd1   =   fromidtonode(id,   tmpnd.nodes)    
      if   not   (tmpnd1   is   nothing)   then    
      return   tmpnd1    
      exit   function    
      end   if    
      next    
      return   nothing    
      end   function      
       
       
        四、结束语    
       
       
        以上阐述asp.net中树状显示的基本方法,以及如何在对树节点进行维护的同时,修改数据库数据。由于篇幅所限,笔者在此只对基本思路和流程及关键步骤作了介绍,并未列出详细源代码,读者可自行完善。需要详细源代码者可与我联系,本文程序在vs.net、sqlserver、windows   2000、iis5.0下调试通过。  
     

    .
    站内导航:
    IT热门资讯:
      最佳浏览:1024X768 MSIE
    ©2007 jqmk.com.cn All Rights Reserved