我在网上找了几个树,都是用add(new node(“”))诸如此类方法追加节点,我现在用SQL查出来这样的记录:一列是级别(level),一列是本身id,一列是名字(name),一列是父(parid);
我现在想把这个结果集动态的加到一个根里,我该怎么加?
例:var tv = new treeview("treeview");
var b = new node("name1","tag");
var c = new node("name2");
var d = new node("name3");
tv.add(b);
b.add(c);
b.add("name8");
c.add(d);帮帮忙吧,脑袋都想大了,实在不会了!都说这东西递归能行,我还递不明白!!

解决方案 »

  1.   

    首先,将这些数据order by level desc然后,用个foreach 语句,逐条构造成node,因为已经按照level排了序,所以此时的node根据其parid就可以找到对应的父
     node getNode(var parid,var level) //写个根据层次和id找节点的方法
    { ... }
    找到其父节点,调用父节点的add即可
      

  2.   

    首先,将这些数据order by level desc然后,用个foreach 语句,逐条构造成node,因为已经按照level排了序,所以此时的node根据其parid就可以找到对应的父
     node getNode(var parid,var level) //写个根据层次和id找节点的方法
    { ... }
    找到其父节点,调用父节点的add即可
      

  3.   

    http://www.cnblogs.com/doll-net/archive/2007/08/05/843991.html
    希望对你有所帮助
      

  4.   

    给段代码吧protected void Page_Load(object sender, System.EventArgs e)
            {
                if (!Page.IsPostBack)
                {
                    GetDataTable1();
                    InitTreeRootNode(TreeView1);
                    if (TreeView1.Nodes.Count == 1)
                    {
                        TreeView1.ExpandDepth = 1;
                    }
                }
            }
            public void GetDataTable1()
            {
                Database dbase = new Database();
                string username = Request.Cookies["Username"].Value.ToString();
                SqlParameter[] prams ={ dbase.MakeInParam("@Username", SqlDbType.VarChar, 20, username) };
                try
                {
                    dataTbl1 = dbase.RunProcAdd("sp_GetShowClass", prams);
                }
                catch (Exception ex)
                {
                    KMS.Components.Error.Log(ex.Message);
                    Response.Write(ex.Message);
                }
                dataTbl1.TableName = "TreeView";
            }
            private void GetDataTable2(int nodeID)
            {
                Database dbase = new Database();
                SqlParameter[] prams = { dbase.MakeInParam("@Class_id", SqlDbType.Int, 20, nodeID) };
                try
                {                dataTbl2 = dbase.RunProcAdd("sp_GetAllChildClass", prams);            }
                catch (Exception ex)
                {
                    Response.Write(ex.Message);
                    throw new Exception(ex.Message);
                }
                dataTbl2.TableName = "TreeView";
            }
            /// <summary>
            /// 初始化TreeView 的 RootNode
            /// </summary>
            private void InitTreeRootNode(System.Web.UI.WebControls.TreeView TNC)
            {
                for (int i = 0; i < dataTbl1.Rows.Count; i++)
                {
                    System.Web.UI.WebControls.TreeNode tn = new System.Web.UI.WebControls.TreeNode();
                    tn.Value = dataTbl1.Rows[i]["ClassID"].ToString();
                    tn.Text = "<span style='font-size:10pt' onmouseover=javascript:this.style.color='white';this.style.backgroundColor='#8592B5'; onmouseout=javascript:this.style.color='#494949';this.style.backgroundColor='white'; title='" + dataTbl1.Rows[i]["className"].ToString() + "'>" + dataTbl1.Rows[i]["className"].ToString() + "</span>";
                    tn.ImageUrl = GetIcon(dataTbl1.Rows[i]["classType"].ToString());
                    tn.NavigateUrl = "../SubModule/UnitiveDocument/switch.aspx?Action=1&ClassID=" + dataTbl1.Rows[i]["classID"].ToString();
                    tn.Target = "MainFrame";
                    TNC.ExpandDepth = 1;
                    TNC.ShowLines = true;
                    tn.Expanded = false;
                    TNC.Nodes.Add(tn);
                    GetDataTable2(int.Parse(tn.Value));
                    InitTreeChildNode(tn, tn.Value);
                }
                           dataTbl1 = null;
                dataTbl2 = null;
            }        /// <summary>
            /// 初始化TreeView 的 ChildNode
            /// </summary>
            private void InitTreeChildNode(System.Web.UI.WebControls.TreeNode TNC, string classParentID)
            {
                DataView dataView = new DataView();
                dataView = dataTbl2.Copy().DefaultView;
                dataView.RowFilter = "ClassParentID = " + classParentID + "";
                foreach (DataRowView drv in dataView)
                {
                    System.Web.UI.WebControls.TreeNode tn = new System.Web.UI.WebControls.TreeNode();
                    tn.Value = drv["ClassID"].ToString();
                    tn.Text = "<span style='font-size:10pt' onmouseover=javascript:this.style.color='white';this.style.backgroundColor='#8592B5'; onmouseout=javascript:this.style.color='#494949';this.style.backgroundColor='white'; title='" + drv["ClassName"].ToString() + "'>" + drv["ClassName"].ToString() + "</span>";
                    tn.ImageUrl = GetIcon(drv["ClassType"].ToString());
                    tn.NavigateUrl = "../SubModule/UnitiveDocument/Switch.aspx?Action=1&ClassID=" + drv["ClassID"].ToString();
                    tn.Target = "MainFrame";
                    TNC.ChildNodes.Add(tn);
                    InitTreeChildNode(tn, tn.Value);
                }           
            }        #region 获取节点图标
            /// <summary>
            /// 获取节点图标
            /// </summary>
            private string GetIcon(string ClassType)
            {
                string rtnValue = "../Image/";
                switch (ClassType)
                {
                    case "0":
                        rtnValue += "Icon_flag.gif";
                        break;
                    case "1":
                        rtnValue += "Icon_myDoc.gif";
                        break;
                    case "2":
                        rtnValue += "Iocn_mail.gif";
                        break;
                    case "3":
                        rtnValue += "Icon_page.gif";
                        break;
                    case "4":
                        rtnValue += "Icon_staff.gif";
                        break;
                    case "5":
                        rtnValue += "Iocn_helpPage.gif";
                        break;
                    case "6":
                        rtnValue += "Iocn_myTask.gif";
                        break;
                    case "7":
                        rtnValue += "Iocn_mail.gif";
                        break;
                    case "8":
                        rtnValue += "Icon_myDoc.gif";
                        break;
                    case "9":
                        rtnValue += "Icon_docFlow.gif";
                        break;
                    case "10":
                        rtnValue += "Icon_clientManage.gif";
                        break;
                    case "11":
                        rtnValue += "Icon_myLinkman.gif";
                        break;
                    case "12":
                        rtnValue += "Icon_position.gif";
                        break;
                    case "13":
                        rtnValue += "Icon_roleManage.gif";
                        break;
                    case "14":
                        rtnValue += "Icon_kaoqin.gif";
                        break;
                    case "15":
                        rtnValue += "Icon_workadmin.gif";
                        break;
                    case "16":
                        rtnValue += "Icon_message.gif";
                        break;
                    case "17":
                        rtnValue += "Iocn_subsectionQuery.gif";
                        break;
                    case "18":
                        rtnValue += "Iocn_addresslist.gif";
                        break;
                    case "19":
                        rtnValue += "Icon_contractQuery.gif";
                        break;
                    case "20":
                        rtnValue += "Icon_stockQuery.gif";
                        break;
                    case "21":
                        rtnValue += "memobook.gif";
                        break;
                    default:
                        rtnValue += "Icon_redBall.gif";
                        break;
                }
                return rtnValue;
            }
            #endregion
        }
      

  5.   

    function AddNodeByParent(int ParentID)
    {//根据ParentID得到父结点(当前结点,如果是0则是树根,否则是下级结点for(int i=0;i<list.length;i++)
    {
     //增加节点
     
    AddNodeByParent(list[i].ID);
    }
    }这样不就是递归了嘛