数据库是以下面格式存的,要把这些数据绑到treeview上,自己想的方法过于繁琐,请教下好的算法
ID      ParentID
0          0
1          0
2          0
3          1
4          2
5          1
6          2
...
生成的树
0   1   3
        5
    2   4
        6
...

解决方案 »

  1.   

    先按parentid、id排序,然后从上往下添加即可。
      

  2.   

    选择节点后再去读取数据库建立下一级子节点
    这样连接太频繁,不可取,3楼能够稍微详细点吗,给个sql的例子
      

  3.   

    2种都有利弊,不是那种好那种坏,网页里的树都是去读取的,csdn左侧那树就是如此
    只读一次,然后都建好也不一定就好,如果数据很多的话
      

  4.   

    1.先把所有的ParentId读出来存到数组里面。
    2.读取全部数据。这样就不用一条记录读一次数据库了啊
      

  5.   

    因为你是无限极,如果是固定就2、3级,一次建完倒也无妨, web里也是div隐藏
      

  6.   

     protected void Page_Load(object sender, EventArgs e)
        {
            DataTable dt = GetData(0);
            //一级菜单,parentId 为0 表示一级菜单
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                TreeNode root = new TreeNode();
                root.Text = dt.Rows[i]["id"].ToString();
                root.Value = dt.Rows[i]["parentId"].ToString();
                Treeview1.Nodes.Add(root);
                //////
                AddNode(root);
            }
        }
       
        private void AddNode(TreeNode root)
        {
            DataTable dt=GetData(int.Parse (root.Text));
            if (dt.Rows.Count > 0)
            {
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    TreeNode node = new TreeNode();
                    node.Text = dt.Rows[i]["id"].ToString(); ;//parentId=0
                    node.Value = dt.Rows[i]["parentId"].ToString();
                    root.ChildNodes.Add(node);                AddNode(node);
                }
            }
        }    private DataTable GetData(int id )
        {
            SqlConnection conn = new SqlConnection("database=test;uid=sa;pwd=sa;server=.");
            SqlCommand cmd = conn.CreateCommand();
            cmd.CommandText = "select * from test where parentId=@id";
            SqlParameter para = new SqlParameter();
            para.ParameterName = "@id";
            para.SqlDbType = SqlDbType.Int;
            para.Value = id;
            cmd.Parameters.Add(para);
            SqlDataAdapter da = new SqlDataAdapter();
            da.SelectCommand = cmd;
            DataTable dt = new DataTable();
            da.Fill(dt);
            return dt;
        }
    Treeview1_TreeNodeExpanded(object sender, TreeNodeEventArgs e)
    有的代码你可以写在这个事件里面,代码我没有进行封装,你自己精简一下