解决方案 »

  1.   

    尽量只 一次性加载 数据,也就是说你尽量只访问一次数据库,像你这么访问数据库不悲剧么??你可以先把数据放到内存中,然后用算法组成一棵数据树 然后再把数据树放到treeview中
      

  2.   

    用rowfilter也是不错的方法,相对比较简单.......
      

  3.   

      建议 使用forrach()循环  
      

  4.   

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Data.SqlClient;
    using System.Data;
    namespace 斯德瑞克
    {
        public partial class Control_pro_left : System.Web.UI.UserControl
        {
            DataTable dt = new DataTable();
            protected void Page_Load(object sender, EventArgs e)
            {
                if (!IsPostBack)
                {                try
                    {   
                        string conString = "Data Source=61.129.102.96;uid=sdrk;pwd=ling1208;Database=sdrk_0517_86986158";                    SqlConnection con = new SqlConnection(conString);                    con.Open();                    string strSQL = "select * from sysparameters";                    SqlDataAdapter da = new SqlDataAdapter(strSQL, con);                    da.Fill(dt);
                        con.Close();
                    }                catch 
                    {                }                finally
                    {                                    }                AddTreeNode(0, (TreeNode)null);            }
             }        protected void AddTreeNode(int parentId, TreeNode pNode)
            {            TreeNode tn1 = new TreeNode();            DataView dv = new DataView(dt);            //过滤parentId,得到当前节点的所有子节点            dv.RowFilter = "pid=" + parentId;
                foreach (DataRowView drv in dv)
                {                if (pNode == null)
                    {                    tn1.Text = drv["name"].ToString(); //节点上要显示的名称                   // tn1.NavigateUrl = drv["url"].ToString();  //点击节点名称,跳转到指定url页面                    this.ling1208.Nodes.Add(tn1); //将根节点加入到TreeView中去                    tn1.Expanded = true;                    //递归调用                    AddTreeNode(Int32.Parse(drv["id"].ToString()), tn1);                }                else
                    {                    TreeNode tn2 = new TreeNode();                    tn2.Text = drv["name"].ToString();                   // tn2.NavigateUrl = drv["url"].ToString();                    pNode.ChildNodes.Add(tn2);                    tn1.Expanded = true;                    //递归调用                    AddTreeNode(Int32.Parse(drv["id"].ToString()), tn2);                }            }        }    }
    }这是我用taomanman修改后的代码,但提示:
    索引必须位于该列表的界限内。
    参数名: index 
    异常详细信息: System.ArgumentOutOfRangeException: 索引必须位于该列表的界限内。
    参数名: index源错误: 
        // tn1.NavigateUrl = drv["url"].ToString();  //点击节点名称,跳转到指定url页面
          this.ling1208.Nodes.Add(tn1); //将根节点加入到TreeView中去 
      

  5.   

    恩???你的ling1208是什么?是那个TreeView控件的ID??你之前页面中的代码
    this.Trv_list.Nodes.Add(node);
    说明你的TreeView的ID为Trv_list怎么后来ID你都改了?还是你敲错了????而且你怎么命名空间怎么还中文???namespace 斯德瑞克还有代码你照着修改,但是数据库的结构跟我举例的类似不??
      

  6.   

    这递归相当于有几十个 或者几百个未关闭 数据库连接或datareader对象实例,肯定会卡了