当然不能直接classTree.Nodes[i].Nodes.Add(tmpTn);这样,你应该首先找到需要加入的节点,然后在此节点下加入子节点。既然要递归调用,修改一下AddNode函数,增加一个参数Index即传入节点的索引值,那么下次添加节点的时候,可直接定位到目标节点。

解决方案 »

  1.   

    //怎样写这句,能使分级别的加入节点?
    >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>递归调用函数可以这样写://建树的基本思路是:从根节点开始递归调用显示子树 
    private void InitTree(TreeNodeCollection Nds,string parentId)
    {
    DataView dv=new DataView();
    TreeNode tmpNd;
    dv.Table=ds.Tables["tree"];
    dv.RowFilter="ParentId='" + parentId + "'" ;

    foreach(DataRowView drv in dv)
    {
    tmpNd=new TreeNode();
    tmpNd.ID=drv["NodeId"].ToString();
    tmpNd.Text=drv["NodeName"].ToString();
    tmpNd.ImageUrl="../images/"+drv["Icon"].ToString();
    tmpNd.NavigateUrl=drv["Address"].ToString();
    Nds.Add(tmpNd);

    InitTree(tmpNd.Nodes,tmpNd.ID);
    }
    }
    private DataSet CreateDataSet()
    {
    cmdSelect="select * from S_Menu";
    myCmd=new SqlDataAdapter(cmdSelect,Conn);
    ds=new DataSet();
    myCmd.Fill(ds,"tree");
    return ds;
    }
    还有一点是比较重要的,就是数据库中的记录。ParentID=ID的记录是ID记录的下一级,这样便实现了利用数据库中的记录实现分级显示,动态加载