ASP.NET樹形圖是怎樣的

這篇文章給大家介紹ASP.NET樹形圖是怎樣的,內(nèi)容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

創(chuàng)新互聯(lián)致力于互聯(lián)網(wǎng)品牌建設(shè)與網(wǎng)絡(luò)營銷,包括成都網(wǎng)站建設(shè)、網(wǎng)站制作、SEO優(yōu)化、網(wǎng)絡(luò)推廣、整站優(yōu)化營銷策劃推廣、電子商務(wù)、移動互聯(lián)網(wǎng)營銷等。創(chuàng)新互聯(lián)為不同類型的客戶提供良好的互聯(lián)網(wǎng)應(yīng)用定制及解決方案,創(chuàng)新互聯(lián)核心團隊十載專注互聯(lián)網(wǎng)開發(fā),積累了豐富的網(wǎng)站經(jīng)驗,為廣大企業(yè)客戶提供一站式企業(yè)網(wǎng)站建設(shè)服務(wù),在網(wǎng)站建設(shè)行業(yè)內(nèi)樹立了良好口碑。

ASP.NET樹形圖用于顯示按照樹形結(jié)構(gòu)進行組織的數(shù)據(jù),其用途比較廣泛,如計算機中的文件系統(tǒng)(Windows中的資源管理器)、企業(yè)或公司的組成結(jié)構(gòu)等。我們知道在Windows下VB、PB、Delphi等工具提供了一個功能很強的樹型控件TreeView,利用Treeview控件可以方便地開發(fā)樹形圖。然而在網(wǎng)頁上實現(xiàn)樹形圖就不那么容易了,現(xiàn)在在ASP.NET中利用微軟提供的Internet Explorer WebControls它使得網(wǎng)頁上的樹形圖開發(fā)與在Windows下一樣的方便,一樣的功能強大,甚至更靈活。

介紹用Internet Explorer WebControls開發(fā)ASP.NET樹形圖的方法,由于樹形圖結(jié)構(gòu)較復(fù)雜,使用起來常不知如何下手。筆者結(jié)合最近剛為公司用ASP.NET編寫的應(yīng)用程序管理器這一具體實例,詳細闡述在ASP.NET下如何將Internet Explorer WebControls的使用與數(shù)據(jù)庫聯(lián)系起來,實現(xiàn)數(shù)據(jù)分任意多層顯示,方便地進行增加、修改、刪除、移動操作。筆者希望通過對該實例的闡述,達到拋磚引玉的效果,與各位同仁相互交流,共同進步。

一、樹的建立

具體方法是:創(chuàng)建一個數(shù)據(jù)庫,設(shè)計樹圖信息表TREE_INFO,包含NODEID、PARENTID、NODENAME、ADDERSS、ICON字段,其它字段根據(jù)實際業(yè)務(wù)而定,節(jié)點名稱NODENAME將在樹型控件的節(jié)點上顯示,NODEID字段保存節(jié)點的***標(biāo)識號,PARENTID表示當(dāng)前節(jié)點的父節(jié)點號,標(biāo)識號組成了一個“鏈表”,記錄了樹上節(jié)點的結(jié)構(gòu)。設(shè)計一個Web窗體其上放置TreeView控件。

  1. Private Sub CreateDataSet()’建立數(shù)據(jù)集  

  2. Dim myConn As New SqlConnection()  

  3. Dim myCmd As New SqlCommand("select NODEID,NODENAME,PARENTID,
    ADDRESS,ICON from Tree_info", myConn)  

  4. Dim myDataAdapter As New SqlDataAdapter()  

  5. myConn.ConnectionString = Application("connectstring")  

  6. myCmd.CommandText = "" 

  7. myCmd.Connection = myConn 

  8. myDataAdapter.SelectCommand = myCmd 

  9. myDataAdapter.Fill(ds, "tree")  

  10. End Sub  

建樹的基本思路是:從根節(jié)點開始遞歸調(diào)用顯示子樹

  1. Private Sub Page_Load(ByVal sender As System.Object, 
    ByVal e As System.EventArgs) Handles MyBase.Load  

  2. CreateDataSet()  

  3. intiTree(TreeView1.Nodes, 0)  

  4. End Sub  

  5. Private Sub intiTree(ByRef Nds As TreeNodeCollection, 
    ByVal parentId As Integer)  

  6. Dim dv As New DataView()  

  7. Dim drv As DataRowView  

  8. Dim tmpNd As TreeNode  

  9. Dim intId As Integer  

  10. dv.Table = ds.Tables("tree")  

  11. dv.RowFilter = "PARENTID=’" & parentId & "’"  

  12. For Each drv In dv  

  13. tmpNd = New TreeNode()  

  14. strId = drv("NODE_ID")  

  15. tmpNd.ID = strId 

  16. tmpNd.Text = drv("NODE_NAME ")  

  17. tmpNd.ImageUrl = drv("ICON").ToString  

  18. Nds.Add(tmpNd)  

  19. intiTree(Nds(Nds.Count - 1).Nodes, intId)  

  20. Next  

  21. End Sub 

二、增加、刪除樹節(jié)點

單純在Treeview 上增加、刪除、修改節(jié)點只需用Nodes屬性的Add、 Remove、等方法即可,值得注意的地方是VS.NET中Treeview的Nodes集合與VS6.0中的區(qū)別,VS6.0中的是一個大的集合,而 VS.NET中的是分層的每個Node下都有Nodes屬性。增加、刪除、修改樹節(jié)點時與VS6.0相比有很大差別,特別是刪除時。
Private Sub ButAdd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButAdd.Click’在選定的節(jié)點下添加子節(jié)點

  1. Dim tmpNd As New TreeNode(), NdSel As TreeNode  

  2. tmpNd.ID = GetNewId()  

  3. NdSel = TreeView1.GetNodeFromIndex(TreeView1.SelectedNodeIndex)’選中的節(jié)點  

  4. tmpNd.Text = "新節(jié)點" 

  5. NdSel.Nodes.Add(tmpNd)  

  6. Dim myRow As DataRow  

  7. myRow = ds.Tables("tree").NewRow()  

  8. myRow("NODE_NAME") = tmpNd.ID  

  9. myRow("NODE_DESCRIPT") = "新節(jié)點" & tmpNd.ID & "_" & NdSel.ID  

  10. myRow("PARENT_NAME") = NdSel.ID  

  11. ds.Tables("tree").Rows.Add(myRow)  

  12. End Sub  

  13. Private Sub ButDele_Click(ByVal sender As Object, ByVal e As System.EventArgs) 
    Handles ButDele.Click’刪除選中的節(jié)點  

  14. Dim idx As String = TreeView1.SelectedNodeIndex()  

  15. GetNdCol(idx).Remove(TreeView1.GetNodeFromIndex(idx))  

  16. Dim dv As New DataView(), recNo As Integer  

  17. dv.Table = ds.Tables("tree")  

  18. dv.RowFilter= "NODEID=" & NdId  

  19. dv.Delete(0)  

  20. End Sub  

  21. Private Function GetNdCol(ByVal idx As String) As TreeNodeCollection  

  22. ‘獲得選中節(jié)點的父節(jié)點的Nodes集合  

  23. Dim cnt As Integer, i As Integer  

  24. Dim tmpNds As TreeNodeCollection  

  25. Dim idxs() As String  

  26. idxs = Split(idx, ".")  

  27. cnt = UBound(idxs)  

  28. If cnt = 0 Then  

  29. tmpNds = TreeView1.Nodes  

  30. Else  

  31. tmpNds = TreeView1.Nodes(CInt(idxs(0))).Nodes  

  32. For i = 1 To cnt - 1  

  33. tmpNdstmpNds = tmpNds(CInt(idxs(i))).Nodes  

  34. Next  

  35. End If  

  36. Return tmpNds  

  37. End Function 

三、修改、移動樹節(jié)點

由于服務(wù)器控件不支持鼠標(biāo)拖動事件,所以不能象Windows程序那樣通過拖動移動節(jié)點,這里是通過選擇父節(jié)點的方式。移動是通過在原位置刪除,新位置添加實現(xiàn)的,要注意在刪除時先保存節(jié)點信息。

  1. Private Sub TreeView1_SelectedIndExchange(ByVal sender As Object, 
    ByVal e As Microsoft.Web.UI.WebControls.TreeViewSelectEventArgs) 
    Handles TreeView1.SelectedIndexChange  

  2. Dim dv As New DataView()  

  3. dv.Table = ds.Tables("tree")  

  4. Dim tmpNd As TreeNode = TreeNdSel(e.OldNode), tmpNds As TreeNodeCollection  

  5. dv.RowFilter= "NODEID=" & tmpNd.ID  

  6. dv(0)("NODE_DESCRIPT") = Me.TextBox1.Text  

  7. dv(0)("ADDRESS") = Me.TextBox2.Text  

  8. dv(0)("TARGET") = Me.TextBox3.Text  

  9. dv(0)("ICON") = Me.TextBox4.Text  

  10. If dv(0)("PARENTID").ToString <> Me.DropDownList1.SelectedItem.Value Then  

  11. ‘移動節(jié)點  

  12. dv(0)("PARENT_NAME") = Me.DropDownList1.SelectedItem.Value  

  13. If Me.DropDownList1.SelectedItem.Value = "ROOT" Then  

  14. tmpNds = TreeView1.Nodes  

  15. Else  

  16. tmpNds = FromIdToNode(Me.DropDownList1.SelectedItem.Value, 
    TreeView1.Nodes).Nodes’新的父節(jié)點的Nodes集合  

  17. End If  

  18. GetNdCol(e.OldNode).Remove(tmpNd)  

  19. tmpNds.Add(tmpNd)  

  20. End If  

  21. tmpNd.Text = Me.TextBox1.Text  

  22. tmpNd.ImageUrl = Me.TextBox4.Text  

  23. tmpNd = TreeView1.GetNodeFromIndex(TreeView1.SelectedNodeIndex)  

  24. dv.RowFilter= "NODEID=" & tmpNd.ID  

  25. Me.TextBox1.Text = dv(0)("NODENAME").ToString  

  26. Me.TextBox2.Text = dv(0)("ADDRESS").ToString  

  27. Me.TextBox3.Text = dv(0)("TARGET").ToString  

  28. Me.TextBox4.Text = dv(0)("ICON").ToString  

  29. End Sub  

  30. Private Function FromIdToNode(ByVal ID As String, 
    ByVal Nds As TreeNodeCollection) As TreeNode  

  31. ‘由關(guān)鍵字查找節(jié)點  

  32. Dim i As Integer  

  33. Dim tmpNd As TreeNode, tmpNd1 As TreeNode  

  34. For Each tmpNd In Nds  

  35. If tmpNd.ID = ID Then  

  36. Return tmpNd  

  37. Exit Function  

  38. End If  

  39. tmpNd1 = FromIdToNode(ID, tmpNd.Nodes)  

  40. If Not (tmpNd1 Is Nothing) Then  

  41. Return tmpNd1  

  42. Exit Function  

  43. End If  

  44. Next  

  45. Return Nothing  

  46. End Function 

以上闡述ASP.NET樹形圖,以及如何在對樹節(jié)點進行維護(增加、刪除、修改、移動)的同時,修改數(shù)據(jù)庫數(shù)據(jù)。由于篇幅所限,筆者在此只對基本思路和流程及關(guān)鍵步驟作了介紹,并未列出詳細源代碼,讀者可自行完善。需要詳細源代碼者可與我聯(lián)系,本文程序在VS.NET、SQLServer、 Windows 2000、IIS5.0下調(diào)試通過。

關(guān)于ASP.NET樹形圖是怎樣的就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

網(wǎng)站標(biāo)題:ASP.NET樹形圖是怎樣的
文章URL:http://muchs.cn/article40/pispho.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供服務(wù)器托管、網(wǎng)站維護、網(wǎng)站制作、網(wǎng)站設(shè)計公司、微信公眾號、網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護公司