ASP.NET通過遞歸添加樹(Treeview)


先來看看效果,基本上就是這樣的。

所謂樹,無非就是2點,第一個:根節點,第二:葉子節點,其中葉子節點中還可能有葉子節點,但是根節點始終只有一個。

下面貼上 各部分的代碼

1.PAGE_LOAD載入事件。

    protected void Page_Load(object sender, EventArgs e)
    {
        BindTree(); //綁定樹
    }

2.BindTree方法。

    private void BindTree()
    {
      DataSet  ds = new DataSet(); //這里的DS里不存在數據,具體情況請大家自己具體考慮,修改代碼
        
        TreeView1.Nodes.Clear(); 

        AddTree("-1", (TreeNode)null,ds);
        TreeView1.Nodes[0].Expanded = true;
    }

3.AddTree方法,遞歸添加樹。

 
/*其中ds對應的是一個實體類Model,里面的IndexName,IndexID等,都是對應着數據庫里的相應字段所以我們在使用這個方法時前,必須先得到相對應的有具體意義的DataSet*/

 /// <summary>
    /// 遞歸樹
    /// </summary>
    /// <param name="ParentID">當前節點父節點ID</param>
    /// <param name="pNode"></param>
    /// <param name="ds"></param>
private void AddTree(string ParentID, TreeNode pNode,DataSet ds)
    {
        DataView dvTree = new DataView(ds.Tables[0]); //用DataView來模擬DataTable,因為DV是虛擬的表,所以可以提高效率
        foreach (DataRowView Row in dvTree)
        {
            TreeNode node = new TreeNode();
            if (pNode == null)
            {         //添加根節點   
                node.Text = Row["IndexName"].ToString();
                node.Value = Row["IndexID"].ToString(); 
           
                if (Row["IndexClass"].ToString() == "0")
                {
                    node.NavigateUrl = "IndexInfo1.aspx?IndexID=" + node.Value;
                }
                else
                {
                    node.NavigateUrl = "IndexInfo2.aspx?IndexID=" + node.Value;
                }
                
                node.Target = "mainFrame";
                node.Expanded = false;
                TreeView1.Nodes.Add(node);  //添加根節點
                AddTree(Row["IndexID"].ToString(), node,ds);         //遞歸,添加子節點,這段遞歸是必須的,不然只會添加根節點,而進不到下面的else語句,pNode在TreeView第二次執行以后都是不為空的,所以會一直跳到執行ELSE語句里的內容。   
                
            }
            else
            {       //添加當前節點的子節點   

                node.Text = Row["IndexName"].ToString();
                node.Value = Row["IndexID"].ToString();
                node.ToolTip = node.Text;   
                if (Row["IndexClass"].ToString() == "0" || Row["IndexParentID"].ToString() == "-1")
                {
                    
                    node.NavigateUrl = "IndexInfo1.aspx?IndexID=" + node.Value;
                }
                else
                {
                   
                    node.NavigateUrl = "IndexInfo2.aspx?IndexID=" + node.Value;
                }
                
                node.Target = "Frame1"; //某一個節點指向的一個IFRAME,里面可以是這個節點下的具體內容。
                //node.NavigateUrl = Request.Url.LocalPath + "?OrgID=" + Row["OrgID"].ToString();
                node.Expanded = false;
                pNode.ChildNodes.Add(node); //pNode為父節點,把Node作為子節點添加進去
                AddTree(Row["IndexID"].ToString(), node,ds);         //遞歸添加子節點 
            }

        }

    }

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM