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

TreeView简单问题?解决后马上给分!

楼主sunshine5211314(〖sunshine〗)2004-12-03 16:59:43 在 .NET技术 / ASP.NET 提问

Page_Load中:  
  {  
  DataSet   ds=Get_Datasource();//得到数据源(DataSet)  
  intiTree(TreeView1.Nodes,0);  
  }  
   
  private   void   intiTree(Microsoft.Web.UI.WebControls.TreeNodeCollection   Nods,int   ParentID)  
  {  
  Microsoft.Web.UI.WebControls.TreeNode   nod;  
  int   intid;  
                                                          DataView   dv=new   DataView();  
  dv.Table=ds.Tables[0];  
   
                                                        dv.RowFilter=   "ID1   =   "   +   ParentID;  
   
  foreach(DataRowView   drv   in   dv)  
  {  
  nod=new   Microsoft.Web.UI.WebControls.TreeNode();  
  nod.Text=drv["name"].ToString();  
  nod.ID=drv["id"].ToString();  
  intid=Convert.ToInt32(drv["ID1"]);  
                                                                          Nods.Add(nod);  
  intiTree(Nods[Nods.Count   -   1].Nodes,   intid);  
  }  
  }  
   
  数据表:ID       ID号  
                  ID1     父节点  
                  name     名字  
   
   
  为什么运行程序,什么都没有?但是DataSet肯定得到数据表了.解决后马上给分! 问题点数:100、回复次数:13Top

1 楼chen99yjeyotech(语过添情)回复于 2004-12-03 17:04:36 得分 10

1.下载地址  
  http://msdn.microsoft.com/downloads/samples/internet/ASP_DOT_NET_ServerControls/WebControls/default.asp  
  下载后是后缀为bat的版本  
  (1)bulid.将bulid.bat的路径指向csc.exe所在路径,生成Microsoft.Web.UI.WebControls.dll。  
  (2)在wwwroot下创建空目录webctrl_client\1_0。  
  (3)将build\Runtime下的文件拷至webctrl_client\1_0下。  
  (4)选择工具箱的自定义工具箱,添加Microsoft.Web.UI.WebControls.dll。  
  有些麻烦  
  但如果你能找到后缀是msi的自动安装版本,直接下一步就行(我一直用这个版本,hoho)  
  安装后,通过“自定义工具箱”->“.net框架组件”把TreeView添加到工具箱里  
   
  2.运行时无法显示  
  一般是TreeView的版本问题,最好下载英文版自动安装版本重新安装,安装前应该先到添加删除程序里卸掉原版本  
   
  3.显示格式出错(非树状显示)  
  TreeView要求客户端浏览器版本为IE5.5及以上,最好要求客户端升级为IE6.0  
   
  4.框架里使用TreeView  
  设置NavigateUrl、Target属性,可更新另外的Frame  
   
  5.找不到TreeNode类  
  使用TreeView,最好添加namespace:using   Microsoft.Web.UI.WebControls;  
   
  6.遍历TreeView节点(递归算法)  
  private   void   Page_Load(object   sender,   System.EventArgs   e)  
  {  
    GetAllNodeText(TreeView1.Nodes);  
  }  
  void   GetAllNodeText(TreeNodeCollection   tnc)  
  {  
    foreach(TreeNode   node   in   tnc)  
    {  
      if(node.Nodes.Count!=0)  
        GetAllNodeText(node.Nodes);  
      Response.Write(node.Text   +   "   ");  
    }  
  }  
   
  7.得到node结点的父节点  
  TreeNode   pnode;  
  if(node.Parent   is   TreeNode)  
    pnode=(TreeNode)node.Parent;  
  else  
    //node   is   root   node  
   
  8.修改TreeView样式(示例)  
  <iewc:TreeView   id="TreeView1"   runat="server"   HoverStyle="color:blue;background:#00ffCC;"   DefaultStyle="background:red;color:yellow;"   SelectedStyle="color:red;background:#00ff00;">  
  用代码:  
  TreeView1.DefaultStyle["font-size"]   =   "20pt";  
   
  9.展开时不提交,改变选择节点时才提交  
  将autopostback设置成false;      
  在body里添加     <body     onload="initTree()">      
  然后在PageLoad里写:      
  string     strTreeName     =     "TreeView1";      
  string     strRef     =     Page.GetPostBackEventReference(TreeView1);      
  string     strScript     =     "<script     language=\"JavaScript\">     \n"     +     "<!--     \n"     +     "                         function     initTree()     {     \n"     +"                                                 "     +     strTreeName     +     ".onSelectedIndexChange     =     function()     {     \n"     +         "if     (event.oldTreeNodeIndex     !=          
  event.newTreeNodeIndex)     \n"     +     "this.queueEvent('onselectedindexchange',     event.oldTreeNodeIndex     +     ','     +     event.newTreeNodeIndex);     \n"     +         "window.setTimeout('"     +     strRef.Replace("'","file://'/")         +     "',     0,     'JavaScript');     \n"     +         "                                                 }     \n"     +             "                         }     \n"     +         "//     -->     \n"     +     "</script>";      
  Page.RegisterClientScriptBlock("InitTree",strScript     );      
     
  这样就只有你点击的节点更改的时候才提交!  
   
  10.TreeView结合XML  
  把XML文件设置为如下格式,然后直接设置TreeNodeSrc为该XML文件就行  
  <?xml   version="1.0"   encoding="GB2312"?>  
  <TREENODES>  
    <TREENODE   TEXT="node0"   EXPANDED="true">  
      <TREENODE   TEXT="node1"/>  
      <TREENODE   TEXT="node2"/>  
    </TREENODE>  
    <TREENODE   TEXT="node3"   NavigateURL="3.aspx"/>  
  </TREENODES>  
  或者用代码  
  TreeView1.TreeNodeSrc="a.xml";  
  TreeView1.DataBind();  
   
     
   
  客户端控制TreeView  
  http://expert.csdn.net/Expert/topic/1382/1382892.xml  
   
  1.设置所选节点,如选中第二个节点  
  function   SetSelNode()  
  {  
    TreeView1.selectedNodeIndex="1";  
  }  
   
  2.得到所选节点的Text,ID或NodeData  
  function   GetAttribute()  
  {  
    alert(TreeView1.getTreeNode(TreeView1.selectedNodeIndex).getAttribute("Text"));  
  }  
  替换Text为ID或NodeData,可分别得到所选节点的ID或NodeData  
   
  3.修改节点属性,如修改第一个节点的Text  
  function   ModifyNode()  
  {  
    var   node=TreeView1.getTreeNode("0");  
    node.setAttribute("Text","hgknight");  
  }  
   
  4.得到点击节点  
  function   TreeView1.onclick()  
  {  
    alert(TreeView1.getTreeNode(TreeView1.clickedNodeIndex).getAttribute("Text"));  
  }  
   
  5.添加节点  
  function   AddNode()  
  {  
    var   node=TreeView1.createTreeNode();  
    node.setAttribute("Text","hgknight");  
    TreeView1.add(node);          
  }  
   
  6.js遍历所有节点  
    var   AllRootNode=new   Array();  
    AllRootNode=TreeView1.getChildren();  
    AlertNode(AllRootNode);        
   
    function   AlertNode(NodeArray)  
    {  
      if(parseInt(NodeArray.length)==0)  
        return;  
      else  
      {  
        for(i=0;i<NodeArray.length;i++)  
        {  
          var   cNode;  
          cNode=NodeArray[i];  
          alert(cNode.getAttribute("Text"));  
          if(parseInt(cNode.getChildren().length)!=0)  
            AlertNode(cNode.getChildren());          
        }  
      }  
    }  
  Top

2 楼sunshine5211314(〖sunshine〗)回复于 2004-12-03 17:09:09 得分 0

先感谢楼上,功能我已经用别的方法实现,只是我不懂为什么用上面的这个方法不行,请各位csdn的兄弟帮忙!Top

3 楼dragonforfly(飘零)回复于 2004-12-03 17:09:19 得分 10

private   static   void   InitTree(TreeNodeCollection   tnd,DataSet   dsShowData,string   strIDValue,string   strTextValue,string   strRowFilter)  
  {  
  bool   boolIntCharSign   =   false;  
  bool   boolHaveBadChar   =   false;  
   
  if(strRowFilter.IndexOf("'")   >   0)  
  {  
  boolIntCharSign   =   true;  
  }  
   
  DataSet   ds   =   dsShowData; //读取数据  
   
  DataView   dv   =   new   DataView();  
  TreeNode   tmpNd;  
   
  dv.Table   =   ds.Tables[0];  
  dv.RowFilter   =   strRowFilter;  
  string   strParentName   =   strRowFilter.Remove(strRowFilter.IndexOf("="),strRowFilter.Substring(strRowFilter.IndexOf("=")).Length);  
   
  foreach(DataRowView   drv   in   dv)  
  {  
  tmpNd         =   new   TreeNode();  
  tmpNd.ID   =   drv[strIDValue].ToString();  
  tmpNd.Text   =   drv[strTextValue].ToString();  
  tmpNd.ImageUrl   =   @"..\images\TreeImg\treeFold.gif";  
  tmpNd.ExpandedImageUrl   =   @"..\images\TreeImg\treeFold_open.gif";  
  tnd.Add(tmpNd); //添加节点  
   
  //检验字符   是否允许转化  
  if(boolIntCharSign)  
  {  
  string   chrBadChar   =   ",.;:'?/-_+=\\|@#$%&*()!~`abcdefghijklmnopqrstuvwxyz";  
         
  string   newStr   =   drv[strIDValue].ToString().ToLower();  
   
  for(int   i=0;i<chrBadChar.Length;i++)  
  {        
  if(newStr.IndexOf(chrBadChar.Substring(i,1))   >=   0)  
  {  
  boolHaveBadChar   =   true;  
  }  
  }  
  }  
   
  if(!boolHaveBadChar)  
  {  
  if(Convert.ToInt64(drv[strIDValue])   ==   0)         //防止死递归  
  break;  
  }  
  //END  
   
  if(boolIntCharSign)  
  InitTree(tmpNd.Nodes,dsShowData,strIDValue,strTextValue,strParentName   +   "='"   +   tmpNd.ID   +   "'"); //递归调用  
  else  
  InitTree(tmpNd.Nodes,dsShowData,strIDValue,strTextValue,strParentName   +   "="   +   tmpNd.ID); //递归调用  
  }  
  }  
   
  自己慢慢去看吧Top

4 楼cgmx(风向标)回复于 2004-12-03 17:10:44 得分 10

dv.Table=ds.Tables[0];   //?  
  没有获取到上面的DataSetTop

5 楼sportdog(会编程的流氓狗)回复于 2004-12-03 17:11:24 得分 10

debug一下,跟踪看看是否到foreach里面去了,还有你的treeview控件是否装对了!Top

6 楼dragonforfly(飘零)回复于 2004-12-03 17:13:17 得分 10

你传入参数调用这个方法使一下  
  private   static   void   InitTree(TreeNodeCollection   tnd,DataSet   dsShowData,string   strIDValue,string   strTextValue)  
  {  
  TreeNode   tmpNd;  
  for   (int   i=0;i<dsShowData.Tables[0].Rows.Count;i++)  
  {  
  tmpNd=new   TreeNode();  
  tmpNd.ID=dsShowData.Tables[0].Rows[i][strIDValue].ToString();  
  tmpNd.Text=dsShowData.Tables[0].Rows[i][strTextValue].ToString();  
  tmpNd.ImageUrl=@"..\images\TreeImg\treeFold.gif";  
  tnd.Add(tmpNd); //添加节点  
  }  
  }Top

7 楼sunshine5211314(〖sunshine〗)回复于 2004-12-03 17:14:29 得分 0

TO     cgmx(Chennet)   :  
  感谢,我的ds为本页全局变量,上面少写了一行  
   
  to   sportdog(会编程的流氓狗)    
  感谢,在同一个页面,我用了别一种方法,则可以成功!所以Treeview   肯定装对了Top

8 楼goody9807(http://goody9807.cnblogs.com)回复于 2004-12-03 17:14:31 得分 0

DataSet   ds=Get_Datasource();//得到数据源(DataSet)  
   
  ~~~~  
                  DataView   dv=new   DataView();  
  dv.Table=ds.Tables[0];  
   
   
  2个ds   不是一个  
   
  你可以把ds设为共享型变量Top

9 楼chnj1981(怡红公子)回复于 2004-12-03 17:21:37 得分 10

关注。Top

10 楼sunshine5211314(〖sunshine〗)回复于 2004-12-03 17:21:58 得分 0

to       dragonforfly(飘零)  
  先感谢,你的方法,只能得到一列,不能分层。  
  我用别的方法已经成功实现,只是不明白,我提问的有什么不对!  
   
    goody9807()   (   )    
  先感谢,我是已经把DataSet   ds   定本页全局变量,只是上面少贴了一行  
  我在page_load中读取了DataSet给了ds.Top

11 楼lizheng197953(胖老虎)回复于 2004-12-03 17:22:13 得分 10

首先,你要保证你的treeview   安装正确。  
  检查方法:在WWWROOT下面看是否有webctrl_client文件夹,里面包含TREEVIEW的图片。如果没有。是显示不出来树的。  
  其次,数据库,代码设计  
  最后,在PAGELOAD里调用  
  if(!ispostback)(必须的)  
  {  
         
  }Top

12 楼goody9807(http://goody9807.cnblogs.com)回复于 2004-12-03 17:28:56 得分 30

using   System;  
  using   System.Collections;  
  using   System.ComponentModel;  
  using   System.Data;  
  using   System.Drawing;  
  using   System.Web;  
  using   System.Web.SessionState;  
  using   System.Web.UI;  
  using   System.Web.UI.WebControls;  
  using   System.Web.UI.HtmlControls;  
  using   Microsoft.Web.UI.WebControls;  
  using   System.Data.SqlClient;  
  namespace   TreeCS  
  {  
  ///    
  ///   WebForm1   的摘要说明  
  ///    
  public   class   WebForm1   :   System.Web.UI.Page  
  {  
  protected   Microsoft.Web.UI.WebControls.TreeView   TreeView1;  
   
  private   void   Page_Load(object   sender,   System.EventArgs   e)  
  {  
  //   定义数据库连接  
  SqlConnection   CN   =   new   SqlConnection();  
  try    
  {  
  //初始化连接字符串  
  CN.ConnectionString=  
  "data   source=pmserver;initial   catalog=Benchmark;persist   security   info=False;user   id=sa;Password=sa;";  
  CN.Open();  
   
  SqlDataAdapter   adp   =   new   SqlDataAdapter("select   *   from   tbTree",CN);  
  DataSet   ds=new   DataSet();  
  adp.Fill(ds);  
  this.ViewState["ds"]=ds;    
  }  
  catch   (Exception   ex)  
  {  
  Session["Error"]   =   ex.ToString();  
  Response.Redirect("error.aspx");               //&#768;跳转程序的公共错误处理页面  
  }  
  finally    
  {  
  CN.Close();  
  }  
  //调用递归函数,完成树形结构的生成  
  AddTree(0,   (TreeNode)null);  
  }  
   
  //递归添加树的节点  
  public   void   AddTree(int   ParentID,TreeNode   pNode)    
  {  
  DataSet   ds=(DataSet)   this.ViewState["ds"];    
  DataView   dvTree   =   new   DataView(ds.Tables[0]);  
  //过滤ParentID,得到当前的所有子节点  
  dvTree.RowFilter   =     "[PARENTID]   =   "   +   ParentID;  
   
  foreach(DataRowView   Row   in   dvTree)    
  {  
  TreeNode   Node=new   TreeNode()   ;  
  if(pNode   ==   null)    
  {         //添加根节点  
  Node.Text   =   Row["ConText"].ToString();  
  TreeView1.Nodes.Add(Node);  
  Node.Expanded=true;  
  AddTree(Int32.Parse(Row["ID"].ToString()),   Node);         //再次递归  
  }    
  else    
  {       //&#768;添加当前节点的子节点  
  Node.Text   =   Row["ConText"].ToString();  
  pNode.Nodes.Add(Node);  
  Node.Expanded   =   true;  
  AddTree(Int32.Parse(Row["ID"].ToString()),Node);           //再次递归  
  }  
  }                                        
  }                          
   
  #region   Web   Form   Designer   generated   code  
  override   protected   void   OnInit(EventArgs   e)  
  {  
  //  
  //   CODEGEN该调用是   ASP.NET   Web   窗体设计器所必需的。  
  //  
  InitializeComponent();  
  base.OnInit(e);  
  }  
   
  ///   <summary>  
  ///设计器支持所需的方法   -   不要使用代码编辑器修改  
  ///   此方法的内容  
  ///   </summary>  
  private   void   InitializeComponent()  
  {          
  this.Load   +=   new   System.EventHandler(this.Page_Load);  
   
  }  
  #endregion  
  }  
  }  
   
  Top

13 楼goody9807(http://goody9807.cnblogs.com)回复于 2004-12-03 17:29:25 得分 0

首先,我们在SQL   SERVER   2000里建立一个表tbTree,表的结构设计如下:  
  列名 数据类型 描述 长度 主键  
  ID Int 节点编号 4 是  
  ParentID Int 父节点编号 4  
  ConText Nvarchar 我们要显示的节点内容 50  
   
  在SQL   SERVER   2000中建表的脚本:  
     
  CREATE   TABLE   [dbo].[tbTree]   (  
  [ID]   [int]   IDENTITY   (1,   1)   NOT   NULL   ,  
  [Context]   [nvarchar]   (50)   COLLATE   Chinese_PRC_CI_AS   NULL   ,  
  [ParentID]   [int]   NULL    
  )   ON   [PRIMARY]  
   
  在表中添加如下记录:    
  SET   IDENTITY_INSERT   tbtree   ON  
  insert   tbtree   (ID,Context,ParentID)     values   (   1,'中国',0)  
  insert   tbtree   (ID,Context,ParentID)     values   (   2,'北京',11)  
  insert   tbtree   (ID,Context,ParentID)     values   (   3,'天津',11)  
  insert   tbtree   (ID,Context,ParentID)     values   (   4,'河北省',1)  
  insert   tbtree   (ID,Context,ParentID)     values   (   5,'广东省',1)  
  insert   tbtree   (ID,Context,ParentID)     values   (   6,'广州',5)  
  insert   tbtree   (ID,Context,ParentID)     values   (   7,'四川省',1)  
  insert   tbtree   (ID,Context,ParentID)     values   (   8,'成都',7)  
  insert   tbtree   (ID,Context,ParentID)     values   (   9,'深圳',5)  
  insert   tbtree   (ID,Context,ParentID)     values   (   10,'石家庄',4)  
  insert   tbtree   (ID,Context,ParentID)     values   (   11,'辽宁省',1)  
  insert   tbtree   (ID,Context,ParentID)     values   (   12,'大连',11)  
  insert   tbtree   (ID,Context,ParentID)     values   (   13,'上海',1)  
  insert   tbtree   (ID,Context,ParentID)     values   (   14,'天河软件园',6)  
  insert   tbtree   (ID,Context,ParentID)     values   (   15,'汕头',5)  
  SET   IDENTITY_INSERT   tbtree   off  
   
  Top

相关问题

  • 简单的TreeView问题,给20分
  • 菜鸟送分:TreeView简单问题
  • 菜鸟送分:TreeView简单问题2
  • 高分 问 treeview简单问题
  • TreeView控件的简单问题,在线等,马上结帖。
  • 在线,简单,马上给分 ,多分!
  • 简单多分,马上给分!
  • 简单多分,马上给分!
  • 超简单问题30分马上给。
  • 简单问题,马上给分

关键词

  • sql server 2000
  • 节点
  • dv
  • 版本
  • 安装
  • treeview
  • tmpnd
  • stridvalue
  • strrowfilter
  • nods

得分解答快速导航

  • 帖主:sunshine5211314
  • chen99yjeyotech
  • dragonforfly
  • cgmx
  • sportdog
  • dragonforfly
  • chnj1981
  • lizheng197953
  • goody9807

相关链接

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

广告也精彩

反馈

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