using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
using System.Web.UI.WebControls.Adapters;public partial class Common_SJ_MMSTemplate : System.Web.UI.Page
{
    DataSet dt = new DataSet();
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!this.IsPostBack)
        {
            bind();
        }    }    public void bind()
    {
        SqlConnection conn = mmsdb.conn();
        string sql = "select * from [t_template] where chnnelID=1";
        SqlDataAdapter dr = new SqlDataAdapter(sql,conn);        dr.Fill(dt,"tree");        //调用递归函数,完成树形结构的生成
        AddTree(0, (TreeNode)null);    }
    // 递归添加树的节点
    public void AddTree(int ParentID, TreeNode pNode)
    {
        DataView dvTree = new DataView(dt.Tables["tree"]);
        //过滤ParentID,得到当前的所有子节点
        dvTree.RowFilter = "[ByTmpID] = " + ParentID;
        foreach (DataRowView Row in dvTree)
        {
            if (pNode == null)
            {    //'̀添加根节点
                TreeNode Node = TreeView1.Nodes.Add(Row["tmpname"].ToString());
                AddTree(Int32.Parse(Row["TmpID"].ToString()), Node);    //再次递归
            }
            else
            {   //添加当前节点的子节点
                TreeNode Node = pNode.Nodes.Add(Row["tmpname"].ToString());
                AddTree(Int32.Parse(Row["tmpid"].ToString()), Node); //再次递归
            }
        }
    } }

解决方案 »

  1.   


    AddTree(Int32.Parse(Row["tmpid"].ToString()),   Node);         //再次递归 
    AddTree(Int32.Parse(Row["TmpID"].ToString()),   Node);         //再次递归 
    Row["TmpID"],["tmpid"]???
      

  2.   

     if   (pNode   ==   null) 
                            {         //'̀添加根节点 
                                    TreeNode   Node   =   TreeView1.Nodes.Add(Row["tmpname"].ToString()); 
                                    AddTree(Int32.Parse(Row["TmpID"].ToString()),   Node);         //再次递归 
                            } 
                            else 
                            {       //添加当前节点的子节点 
                                    TreeNode   Node   =   pNode.Nodes.Add(Row["tmpname"].ToString()); 
                                    AddTree(Int32.Parse(Row["tmpid"].ToString()),   Node); //再次递归 
                            } 
      

  3.   

    仍然错误
    说明: 在编译向该请求提供服务所需资源的过程中出现错误。请检查下列特定错误详细信息并适当地修改源代码。 编译器错误信息: CS1502: 与“System.Web.UI.WebControls.TreeNodeCollection.Add(System.Web.UI.WebControls.TreeNode)”最匹配的重载方法具有一些无效参数源错误:
    行 46:              if (pNode == null)   
    行 47:              {                   //'?添加根节点   
    行 48:                   TreeNode Node = TreeView1.Nodes.Add(Row["tmpname"].ToString());   
    行 49:                   AddTree(Int32.Parse(Row["TmpID"].ToString()),Node);//再次递归   
    行 50:              }   
     
      

  4.   

     public   void   bind() 
            { 
                    SqlConnection   conn   =   mmsdb.conn(); 
                    string   sql   =   "select   *   from   [t_template]   where   chnnelID=1"; 
                    SqlDataAdapter   dr   =   new   SqlDataAdapter(sql,conn);                 dr.Fill(dt,"tree");                 //调用递归函数,完成树形结构的生成 
                    AddTree(0, null);         } 
            //   递归添加树的节点 
            public   void   AddTree(int   ParentID,   TreeNodeCollection   pNode) 
            { 
                    DataView   dvTree   =   new   DataView(dt.Tables["tree"]); 
                    //过滤ParentID,得到当前的所有子节点 
                    dvTree.RowFilter   =   "[ByTmpID]   =   "   +   ParentID; 
                    foreach   (DataRowView   Row   in   dvTree) 
                    { 
                            if   (pNode   ==   null) 
                            {         //'̀添加根节点 
                                    TreeNode   Node   =   TreeView1.Nodes.Add(Row["tmpname"].ToString()); 
                                    AddTree(Int32.Parse(Row["TmpID"].ToString()),   Node);         //再次递归 
                            } 
                            else 
                            {       //添加当前节点的子节点 
                                    TreeNode   Node   =   pNode.Nodes.Add(Row["tmpname"].ToString()); 
                                    AddTree(Int32.Parse(Row["TmpID"].ToString()),   Node); //再次递归 
                            } 
                    } 
            } } 
      

  5.   

    总提示
    TreeNode Node = TreeView1.Nodes.Add(Row["tmpname"].ToString());
    这句错误的。
      

  6.   

    public   void   bind() 
            { 
                    SqlConnection   conn   =   mmsdb.conn(); 
                    string   sql   =   "select   *   from   [t_template]   where   chnnelID=1"; 
                    SqlDataAdapter   dr   =   new   SqlDataAdapter(sql,conn);                 dr.Fill(dt,"tree");                 //调用递归函数,完成树形结构的生成 
                    AddTree(0, null);         } 
            //   递归添加树的节点 
            public   void   AddTree(int   ParentID,   TreeNodeCollection   pNode) 
            { 
                    DataView   dvTree   =   new   DataView(dt.Tables["tree"]); 
                    //过滤ParentID,得到当前的所有子节点 
                    dvTree.RowFilter   =   "[ByTmpID]   =   "   +   ParentID; 
                    foreach   (DataRowView   Row   in   dvTree) 
                    { 
                            if   (pNode   ==   null) 
                            {         //'̀添加根节点 
                                    TreeNode node = new TreeNode();
                                 node.Text=Row["tmpname"].ToString());  
                                    AddTree(Int32.Parse(Int32.Parse(Row["TmpID"].ToString()),   node);         //再次递归 
                            } 
                            else 
                            {       //添加当前节点的子节点 
                                    TreeNode   Node   =   pNode.Nodes.Add(Row["tmpname"].ToString()); 
                                    AddTree(Int32.Parse(Row["TmpID"].ToString()),   Node); //再次递归 
                            } 
                    } 
            } }   
      

  7.   

    兄弟,你能用点心帮我吗?我虽然是新手也看出来了。
    递归调用函数的时候pNode类型不匹配的。
    还有pNode也没有Nodes这个属性!嗨!
      

  8.   

     if   (pNode   ==   null) 
                            {         //'̀添加根节点 
                                    TreeNode node = new TreeNode();
                                 node.Text=Row["tmpname"].ToString());  
                                    AddTree(Int32.Parse(Int32.Parse(Row["TmpID"].ToString()),   node);         //再次递归 
                            } 
                            else 
                            {       //添加当前节点的子节点 
                                                                  TreeNode node = new TreeNode();
                                 node.Text=Row["tmpname"].ToString());  
                                    AddTree(Int32.Parse(Row["TmpID"].ToString()),   node); //再次递归 
                            } 
                    } 
      

  9.   

    1、建立数据库IF EXISTS(SELECT * FROM sysobjects WHERE ID = object_id('Jxt_DeviceManage_DeviceType')
    AND OBJECTPROPERTY(ID,'IsTable') = 1)
    DROP TABLE Jxt_DeviceManage_DeviceType
    CREATE TABLE Jxt_DeviceManage_DeviceType --设备类型表
    (TID INT NOT NULL IDENTITY PRIMARY KEY,--设备类型ID
    TypeName VARCHAR(90) NOT NULL UNIQUE,  --类型名称 设备(暖通,电梯,电气) 设施(建筑物,道路)...
    PID INT--设备父接点ID
    )   CREATE FUNCTION funGetTypeChildTid(@id INT) --用于遍历类型子节点的函数
    RETURNS @re TABLE(tid INT)
    AS
    BEGIN
     INSERT INTO @re SELECT tid FROM Jxt_DeviceManage_DeviceType WHERE pid=@id
     WHILE @@ROWCOUNT>0
      INSERT INTO @re SELECT a.tid 
       FROM Jxt_DeviceManage_DeviceType a INNER JOIN @re b ON a.pid=b.tid
       WHERE a.tid NOT IN(SELECT tid FROM @re)
     RETURN
    END 2、将数据从SQL 数据库读出来,并填充到TreeView控件using System.Data.SqlClient;/// <summary>
      /// 返回一个DataTable类型的函数。
      /// </summary>
      /// <param name="strCmd">查询SQL语句</param>
      /// <returns>DataTable值</returns>
      public DataTable ExecuteSql(string strCmd)
      {
       SqlConnection conn = new SqlConnection(strConn);  /*strConn是数据库连接字符串, server=localhost;database=Market;User id=sa;password=W#e@8521*$;pooling=true;Max Pool Size=10000 */
       DataSet ds = new DataSet();
       SqlDataAdapter da = new SqlDataAdapter(strCmd,conn);
       da.Fill(ds);
       return ds.Tables[0];
      }/// <summary>
      /// 循环遍历,增加节点
      /// </summary>
      /// <param name="dt">内存中的数据表,DataTable类型</param>
      /// <param name="node">树节点,TreeNode类型</param>
      /// <param name="id">要筛选子节点的父节点ID</param>
      private void AddNodes(DataTable dt,TreeNode node,string id)
      {
       DataRow[] rows = dt.Select("PID="+id); //筛选出属于父节点 “node”的子节点集合 
       foreach(DataRow dr in rows) //循环子节点集合 
       { 
        TreeNode nd = new TreeNode();
        //nd.NavigateUrl=dr["URL"].ToString(); //设置浏览的网址 
        nd.NodeData=dr["TID"].ToString(); //存放节点 ID 
        nd.Text=dr["TypeName"].ToString();   //设置节点名称 
        this.AddNodes(dt,nd,nd.NodeData);    //递归,添加该节点的子节点
        if(node==null || id=="0") 
        {
         TreeView1.Nodes.Add(nd);    //添加至根节点 
        } 
        else 
        {
         node.Nodes.Add(nd);              //添加子节点 
        }
       }
      } /// <summary>
     /// 显示设备类型的树状结构
     /// </summary>
     /// <param name="sender"></param>
     /// <param name="e"></param>
      private void Page_Load(object sender, System.EventArgs e)
      {
       if(IsPostBack) 
       {
        return ;
       }
       DataTable dt = ExecuteSql("select * from Jxt_DeviceManage_DeviceType");//从数据库抓出数据 
       this.AddNodes(dt,null,"0");   //添加节点 
       this.TreeView1.SelectedNodeIndex="";   //不选中任何节点。
       this.TreeView1.ExpandLevel=2;  //默认展开深度
       this.TreeView1.ShowLines = true;
      }  
    删除节点/// <summary>
      /// 删除节点,如果为最后一个节点,则不能删除,保证至少有一个节点;
      /// 当节点下还有节点时,不能删除,处于最底层的节点,如果下面有数据,则不能删除
      /// </summary>
      /// <param name="sender"></param>
      /// <param name="e"></param>
      private void btnDelete_Click(object sender, System.EventArgs e)
      {
       string tid = Session["tid"].ToString();
       string strCmdDel = "DELETE Jxt_DeviceManage_DeviceType WHERE TID='"+tid+"'";
       string returnValue = "是根节点,不能删除";
       int count = 0;   if(Convert.ToInt16(tid) > 1)
       {
        if(nodeNumber > 0)
        {
         returnValue = "该节点下还有"+nodeNumber+"个节点,不能删除";
        }
        else
        {
         string strCmd = "SELECT COUNT(*) FROM Jxt_DeviceManage_DeviceBasicData WHERE TID='"+TreeView1.GetNodeFromIndex(this.TreeView1.SelectedNodeIndex).NodeData.ToString()+"'";
         conn = new SqlConnection(strConn);
         conn.Open();
         SqlCommand cmdCount = new SqlCommand(strCmd,conn);
         try
         {
          count = Convert.ToInt16(cmdCount.ExecuteScalar().ToString());
         }
         catch{count = 0;}
         if(count > 0)
         {
          returnValue = "还有"+count+"条记录,不能删除";
         }
         else
         {
          cmd = new SqlCommand(strCmdDel,conn);
          try
          {
           cmd.ExecuteNonQuery();
           returnValue = "删除记录成功.";
          }
          catch
          {
           returnValue = "操作失败.";
          }
          finally
          {
           cmd.Dispose();
          }
         }
         conn.Close();
         conn.Dispose();
        }
       }
       Response.Write("<Script Language=\"JavaScript\">alert(\""+returnValue+".\");</Script>");
       Response.Write("<script language=\"JavaScript\">parent.main.location.href='AllDeviceInit.aspx'</script>");
    //   Response.Write("<script>top.location.href=top.location.href;</script>");
      }/// <summary>
      /// 获取所有的子类型,包括本身TID
      /// </summary>
      /// <param name="tid">父tid</param>
      /// <returns>ArrayList值</returns>
      private ArrayList GetTypeID(string tid)
      {
       ArrayList  arTID = new ArrayList();
       string strCmd = "SELECT * FROM funGetTypeChildTid('"+tid+"')";
       conn = new SqlConnection(strConn);
       SqlDataAdapter da = new SqlDataAdapter(strCmd,conn);
       DataSet ds = new DataSet();
       try
       {
        da.Fill(ds);
        int rowLen = ds.Tables[0].Rows.Count;
        for(int i = 0 ;i< rowLen; i++)
        {
         arTID.Add(ds.Tables[0].Rows[i][0]);
        }
        arTID.Add(tid);
       }
       catch
       {
        arTID.Add(tid);
       }
       finally
       {
        conn.Close();
        conn.Dispose();
       }
       return arTID;
      }
      

  10.   

    兄弟,,我你能不能用点心啊。
    你看看。TreeNodeCollection   pNode)
    函数输入的参数是这个类型,你下面非得要用treenode类型,总是到这里就提示类型错误!
    你发一次,我就要改半天
      

  11.   

    sorry ,以前看过相关的,我以为是那个集合呢.asp.net专家200问当中我没记错的话,就用那个集合,添加树节点的.现在网上找了一段代码,你参考一下,改一下,我只能帮你到这儿了,对了,我是新手,也很用心,很多问题我也不会.
    哈哈