天天看點

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

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

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);         //遞歸添加子節點 
            }

        }

    }
      

  

 

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

作者:

KMSFan

出處:http://www.cnblogs.com/kmsfan

本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。

歡迎大家加入KMSFan之家,以及通路我的優酷空間!

繼續閱讀