我也没写什么识别有没有下级结点的代码,怎么就可以了呢

解决方案 »

  1.   

    public void InitMoldTree(TreeNodeCollection Node,string ParentID)  {
    if(ParentID=="0")
    {
    myconn=new SqlConnection(Conn);
    myconn.Open();
    SQL = "select * from Inst_MoldCode  where MoldName<>'0' order by MoldCode asc";
    Adapter = new SqlDataAdapter(SQL,Conn);
    data = new DataSet();
    Adapter.Fill(data,"MoldCode");
    myconn.Close();
    }
    TreeNode TempNode;
    DataRow[] rows=data.Tables[0].Select("MoldParentCode='"+ParentID+"'");
    foreach(DataRow row in rows)
    {
    TempNode=new TreeNode();
    TempNode.ID=row["MoldCode"].ToString();
    TempNode.Text=row["MoldName"].ToString();
    TempNode.Target="main";
    Node.Add(TempNode);
    InitMoldTree(TempNode.Nodes,TempNode.ID);
    }
    }
    这是我的代码,完全成功的,我是去copy下来的,我的意思是说我并没有去判断递归什么时候结束,递归为什么会智能的自动结束呢
      

  2.   

    foreach(DataRow row in rows)没行了,当然就结束了
      

  3.   

    在这之前,你要先了解递归的含义:
    递归是使函数调用其本身。不知你看到没有?
    foreach(DataRow row in rows)
    {
    TempNode=new TreeNode();
    TempNode.ID=row["MoldCode"].ToString();
    TempNode.Text=row["MoldName"].ToString();
    TempNode.Target="main";
    Node.Add(TempNode);
    InitMoldTree(TempNode.Nodes,TempNode.ID);
    }
    在这里,函数调用了本身: InitMoldTree(TempNode.Nodes,TempNode.ID);当 rows.Length == 0 时,foreach 将会进行不了,即函数将不会再次调用本身。
    递归也就结束了。