我知道是用递归写但给点思路吧贴点代码解释一下代码的内容主要是不怎么明白递归思想顺便也说说递归算法吧各位神啊救救我吧.NET treeview无限分级问题???谢谢勒

解决方案 »

  1.   

    namespace Tree
    {
      public partial class _Default : System.Web.UI.Page
      {
      string StrConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + HttpContext.Current.Server.MapPath("~/") + "b.mdb";
        
      protected void Page_Load(object sender, EventArgs e)
      {
      if (!IsPostBack)
      {
      LoadData();
      }
      }  private void LoadData()
      {  OleDbConnection cn = new OleDbConnection(StrConn);
      cn.Open();
      OleDbCommand cmd = new OleDbCommand("select * from D where DID=PID", cn);
      OleDbDataReader read = cmd.ExecuteReader();
      while (read.Read())
      {
      MyTreeView.Nodes.Clear();
      TreeNode part = new TreeNode();
      part.Expanded = true;
      part.Text = read["DName"].ToString();
      part.Value = read["DId"].ToString();
      MyTreeView.Nodes.Add(part);
      FillFolderNode(read["DId"].ToString(), part);
      }
      read.Close();
      cn.Close();  }  private void FillFolderNode(string p, TreeNode part)
      {
        
      OleDbConnection cn = new OleDbConnection(StrConn);
      cn.Open();
      OleDbCommand cmd = new OleDbCommand("select * from D where PID=" + p + " and DID<>PID", cn);
      OleDbDataReader read = cmd.ExecuteReader();
      while (read.Read())
      {  TreeNode parts = new TreeNode();
      parts.Expanded = false;
      parts.Text = read["DName"].ToString();
      parts.Value = read["DId"].ToString();
      part.ChildNodes.Add(parts);
      FillFolderNode1(read["DId"].ToString(), parts);  }
      read.Close();
      cn.Close();
      }  private void FillFolderNode1(string p, TreeNode part)
      {
        
      OleDbConnection cn = new OleDbConnection(StrConn);
      cn.Open();
      OleDbCommand cmd = new OleDbCommand("select * from D where DID=" + p + " and DID<>PID", cn);
      OleDbDataReader read = cmd.ExecuteReader();
      while (read.Read())
      {  TreeNode parts = new TreeNode();
      parts.Expanded = false;
      parts.Text = read["DName"].ToString();
      parts.Value = read["DId"].ToString();
      part.ChildNodes.Add(parts);  }
      read.Close();
      cn.Close();
      }  protected void MyTreeView_TreeNodeExpanded(object sender, TreeNodeEventArgs e)
      {
      string id = e.Node.Value;
      TreeNode subnode = e.Node;
      subnode.ChildNodes.Clear();//删除以前的,然后才可向下添加两级
      FillFolderNode(id, subnode);
      }  protected void MyTreeView_SelectedNodeChanged(object sender, EventArgs e)
      {
      string id = MyTreeView.SelectedNode.Value;
      MyTreeView.SelectedNode.Expanded = true;
      TreeNode subnode = MyTreeView.SelectedNode;//当前节点
      subnode.ChildNodes.Clear();//删除以前的,然后才可向下添加两级
      FillFolderNode(id, subnode);  Response.Write("<script>window.open('t.aspx?id=" + id + "');</script>");
      }
      }
    }
      

  2.   

    还是有点我是用sql server做的。。
      

  3.   

    if(!IsPostBack)  
    {  
    BindJG();  
    }  
      private void BindJG()  
      {  
      DataSet ds = new DataSet();  
      //获取数据  
      DataTable dtb = ds.Tables[0];  
      TreeNode root = new TreeNode();  
      root.Value = "0";  
      root.Text = "";  
      root.ImageUrl = "../images/folder.gif";  
      root.Expanded = true;  
      this.TreeView1.Nodes.Add(root);  
      initTree(dtb, "", root);  
      this.TreeView1.ExpandAll();  
      }    protected void initTree(DataTable dt, string nFatherid, TreeNode fatherNode)  
      {  
      DataView dv = new DataView(dt);    if (nFatherid == "")  
      dv.RowFilter = "depth='1'";  
      else  
      dv.RowFilter = "ParentId='"+nFatherid+"'";  
      foreach (DataRowView Row in dv)  
      {  
      TreeNode node = new TreeNode();  
      if (fatherNode.Value == "0")  
      {  
      node.Value = Row["BH"].ToString();  
      node.Text = Row["mc"].ToString();  
      node.NavigateUrl = "";  
      node.ImageUrl = "../images/folder.gif";  
      fatherNode.ChildNodes.Add(node);  
      initTree(dt, Row["BH"].ToString(), node);  
      }  
      else  
      {  
      node.Text = Row["mc"].ToString();  
      node.Value = Row["BH"].ToString();  
      node.ImageUrl = "../images/jg.gif";  
      fatherNode.ChildNodes.Add(node);  
      }  
      }  
      }  
      

  4.   

    无限分级,个人觉得不应该一次性加载
    因为这样效率不高,你可以看一下Windows操作系统(比如资源管理器)就是逐级加载的表结构就是多加个Pid
    如果非要递归,好像也只能在业务逻辑层来实现,想直接通过sql语句来实现好像是不现实的