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肯定得到数据表了.解决后马上给分!

解决方案 »

  1.   

    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.04.框架里使用TreeView
    设置NavigateUrl、Target属性,可更新另外的Frame5.找不到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 node8.修改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.xml1.设置所选节点,如选中第二个节点
    function SetSelNode()
    {
     TreeView1.selectedNodeIndex="1";
    }2.得到所选节点的Text,ID或NodeData
    function GetAttribute()
    {
     alert(TreeView1.getTreeNode(TreeView1.selectedNodeIndex).getAttribute("Text"));
    }
    替换Text为ID或NodeData,可分别得到所选节点的ID或NodeData3.修改节点属性,如修改第一个节点的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());    
       }
      }
     }
      

  2.   

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

  3.   

    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); //递归调用
    }
    }自己慢慢去看吧
      

  4.   

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

  5.   

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

  6.   

    你传入参数调用这个方法使一下
    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); //添加节点
    }
    }
      

  7.   

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

  8.   

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

  9.   

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

  10.   

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

  11.   

    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=Bench;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
    }
    }
      

  12.   

    首先,我们在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