例如我的SQL数据库表tree如下:
id    T1     T2     
1     1       1
2     1       null       
3     2       2
4     2       null大致生成的树是:      {1
    {1{
    { {1
tree{
    { {2
    {2{
    { {2
我想大体实现这样的效果,并且可以编辑,新增,删除树上的节点,请问这样的问题如何解决?

解决方案 »

  1.   

    递归。。DEMO
    /// <summary>
            /// 当树节点为0时,创建添加一级指标的节点
            /// </summary>
            /// <param name="mTree"></param>
            /// <param name="level"></param>
            /// <param name="name"></param>
            /// <returns></returns>
            public TreeNode CreateTree(TreeView mTree, string level, string name)
            {
                TreeNode temp = new TreeNode();
                byte[] bTemp;
                temp.Text = "<a herf='#'></a>" + name;            temp.Text += "&nbsp;&nbsp;&nbsp;&nbsp;<a href='#' onclick=\"OpenQAddWin(this)\" srclink=\"QuestionAdd.aspx?code=0&name=" + name + "&level=" + level + "\"><font color='#0000FF'>添加一级指标</font></a>";
                temp.Value = "0";
                mTree.Nodes.Add(temp);
                return temp;
            }        /// <summary>
            /// 通过递归来创建树和加载子节点
            /// </summary>
            /// <param name="mynode"></param>
            /// <param name="dt"></param>
            public void CreateNode(TreeNode mynode, DataTable dt)
            {
                DataTable ds = dt.Copy();
                DataView dvTree = ds.DefaultView;
                dvTree.RowFilter = "Q_ParentCode = " + mynode.Value;
                if (dvTree.Count != 0)
                {
                    foreach (DataRowView Row in dvTree)
                    {
                        string name = Row["Q_Name"].ToString();
                        string Level = Row["Q_Level"].ToString();
                        TreeNode myNode = new TreeNode();
                        myNode.Value = Row["Q_ClassCode"].ToString();
                        myNode.Text = "<a herf='#'></a><img src=\"images\\i.gif\">" + name + "(" + Row["Q_Value"].ToString() + ")";
                        if (Row["Q_IsUsered"].ToString().Trim() != "True")
                        {
                            myNode.Text += " <font color='#ff0000'>[停用]</font>";
                        }
                        //byte[] bTemp = System.Text.Encoding.GetEncoding("GB2312").GetBytes(name);
                        //name = System.Web.HttpUtility.UrlEncode(bTemp);
                        myNode.Text += "&nbsp;&nbsp;&nbsp;&nbsp;<a href='#' onclick=\"OpenQAddWin(this)\" srclink=\"QuestionAdd.aspx?code=" + myNode.Value.ToString() + "&name=" + name + "&level=" + Level + "\"><font color='#0000FF'>添加下级指标</font></a>";
                        myNode.Text += "&nbsp;&nbsp;&nbsp;&nbsp;<a href='#' onclick=\"OpenQEditWin(this)\" srclink=\"QuestionEdit.aspx?code=" + myNode.Value.ToString() + "&name=" + name + "&level=" + Level + "\"><font color='#0000FF'>编辑</font></a>";
                        if (Row["Q_IsChild"].ToString().Trim() != "True")
                        {
                            myNode.Text += "&nbsp;&nbsp;&nbsp;&nbsp;<a href='#' onclick=\"OpenAEditWin(this)\" srclink=\"AnswerEdit.aspx?code=" + myNode.Value.ToString() + "&name=" + name + "&level=" + Level + "\"><font color='#0000FF'>编辑</font></a>";
                        }
                        CreateNode(myNode, dt);
                        mynode.ChildNodes.Add(myNode);
                    }
                }
            }
      

  2.   

    类似这样的结果 
      { {1
      {1{
      { {1
    tree{
      { {2
      {2{
      { {2只能用递归的方法吗?还有其他的方法吗?