treeview的使用小結

我最近做了一個程序。其中用到了treeview。在程序中,我在框架中使用了treeview。並且對treeview進行了節點的增加、刪除、修改、遍歷等操作。 在使用過程中,確實遇到了不少的問題。現在我把程序小結一下,希望和大家一起討論。有什麼不對的地方希望和高手們一起交流一下。也希望能對剛剛使用treeview的網友有一點幫助。 1.使用初步 (1)下載地址 http://msdn.microsoft.com/downloads/samples/internet/default.asp?url=/Downloads/samples/Internet/ASP_DOT_NET_ServerControls/WebControls/default.asp (2)不顯示樹型的問題 首先:下載包分自動安裝和手動安裝兩種包。 要下載大小約650K 的自動安裝包。 其次:TreeView要求客戶端瀏覽器版本爲IE5.5及以上,最好要求客戶端升級爲IE6.0 (3)關於閃爍 將AutoPostBack屬性設置爲真,SelectedIndexChange才能被執行。不過這樣的話刷新的很厲害。不要刷新的話,將AutoPostBack屬性設置爲FALSE. (4)常用的幾個屬性和方法 ~Index 獲取樹節點在樹節點集合中的位置。 ~Nodes 獲取分配給樹視圖控件的樹節點集合。 ~Parent 獲取或設置控件的父容器。 ~SelectedNode 獲取或設置當前在樹視圖控件中選定的樹節點。 ~ExpandAll 展開所有樹節點。 ~Checked 獲取或設置一個值,用以指示樹節點是否處於選中狀態。 ~Text 獲取或設置在樹節點標籤中顯示的文本。 ~Expand 展開樹節點。 ~Clear 清空樹 ~Remove 從樹視圖控件中移除當前樹節點。 (5)常用的幾個操作:增加、刪除、修改、剪切 @增加節點: Dim tmpNd3 As New Microsoft.Web.UI.WebControls.TreeNode() Dim NdSel As New Microsoft.Web.UI.WebControls.TreeNode() 'NdSel 爲當前選定的節點,新節點將作爲它的子節點 NdSel = Treepaybasic.GetNodeFromIndex(Treepaybasic.SelectedNodeIndex) tmpNd3.Text = "新增節點" '在樹中添加這個新節點 NdSel.Nodes.Add(tmpNd3) @刪除節點:
Dim tmpNd3 As New Microsoft.Web.UI.WebControls.TreeNode() Dim NdSel As New Microsoft.Web.UI.WebControls.TreeNode() 'NdSel 爲當前選定的要刪除節點,tmpNd3爲它的父節點 NdSel = Treepaybasic.GetNodeFromIndex(Treepaybasic.SelectedNodeIndex) If (Treepaybasic.SelectedNodeIndex <> "0") Then tmpNd3 = NdSel.Parent tmpNd3.Nodes.Remove(NdSel) Else Treepaybasic.Nodes.Clear() End If @修改節點: Dim NdSel As New Microsoft.Web.UI.WebControls.TreeNode() NdSel = Treepaybasic.GetNodeFromIndex(Treepaybasic.SelectedNodeIndex) NdSel.Text = "aaa" @剪切和粘貼 剪切: Dim tmpNd3 As New Microsoft.Web.UI.WebControls.TreeNode() Dim NdSel As New Microsoft.Web.UI.WebControls.TreeNode() 'NdSel 爲當前選定的要刪除節點,tmpNd3爲它的父節點 NdSel = Treepaybasic.GetNodeFromIndex(Treepaybasic.SelectedNodeIndex) '將剪切下來的節點存入session Session("node") = NdSel If (Treepaybasic.SelectedNodeIndex <> "0") Then tmpNd3 = NdSel.Parent tmpNd3.Nodes.Remove(NdSel) End If 粘貼: Dim tmpNd3 As New Microsoft.Web.UI.WebControls.TreeNode() Dim NdSel As New Microsoft.Web.UI.WebControls.TreeNode() 'NdSel 爲當前要粘貼節點的父節點 NdSel = Treepaybasic.GetNodeFromIndex(Treepaybasic.SelectedNodeIndex) tmpNd3 = Session("node") NdSel.Nodes.Add(tmpNd3) 2.用遞歸生成樹的算法和數據庫設計 (1)遞歸說明 程序調用自身的編程方法稱爲遞歸(recursion)。在樹的生成以及圖的遍歷中,遞歸用的很多。經典的算法求 n! (求n的階乘)中,用的就是遞歸方法。遞歸算法的優點就是簡潔,可擴充性好。但是缺點也很明顯:低效。因爲遞歸就是程序不斷調用自身,對系統的資源消耗比較大。隨着節點的增多,執行效率會變的很低。 爲了解決樹在生成過程中的層樹不定的問題,同時也是爲了讓樹的擴展性更好。樹的生成使用了遞歸的方法。生成樹的代碼一旦寫成,可以不改動源代碼,生成無限級層次的樹。樹的結構完全由數據庫中表的數據決定。 (2)數據庫設計
創建一個數據庫,設計樹圖信息表Treetable,表中屬性包含Nodeid、Parentid、Nodename、Address等字段(分別用於表示節點的ID、父節點ID、節點名稱、鏈接地址),其它屬性根據實際用戶需求和設計而定。節點名稱Nodename將在樹型控件的節點上顯示,Nodeid字段保存節點的唯一標識號,Parentid表示當前節點的父節點ID號(例如有兩個節點是父子關係,孩子節點的Parentid值就是其父節點的Nodeid),節點號父子相接組成了一個“鏈表”,表徵並記錄了樹上節點的層次結構。 表具體設計如下:(簡化模型,實際使用的要複雜一些) 主鍵 屬性名 類型 長度 可空 屬性含義 是 Nodeid int 6 否 節點ID Parentid int 6 否 父節點ID Nodename char 50 否 節點名稱 Address char 80 可 鏈接地址 備註:鏈接地址 主要是用在: 樹在框架中使用的環境。鏈接可以指向其他框架頁中的地址或是帶不同的參數。 (3)程序代碼 ――――――――――――遞歸函數―――――――――――― '生成樹的函數 Private Sub inittree(ByRef Nds As Microsoft.Web.UI.WebControls.TreeNodeCollection, ByVal parentId As Integer) Dim dv As New DataView() Dim dvrow As DataRowView Dim tmpNode As Microsoft.Web.UI.WebControls.TreeNode 'intId爲數值型變量,其作用是記錄並傳遞當前記錄的ID,做爲它子節點的PARENTID值 Dim intId As Integer dv.Table = mySet.Tables("paybasic") 'parentId傳遞的是 additem函數中的intId.下面語句的作用是找出當前節點的子孩子集合。 dv.RowFilter = "parentID='" & parentId & "'" '如果當前節點有孩子,則遍歷所有的孩子,並調用遞歸函數。 For Each dvrow In dv tmpNode = New Microsoft.Web.UI.WebControls.TreeNode() '爲當前節點的各個屬性賦值。 tmpNode.ID = dvrow("nodeID") tmpNode.Text = dvrow("nodename") tmpNode.NavigateUrl = dvrow("Address") intId = dvrow("parentID") '添加一個節點 Nds.Add(tmpNode) '調用遞歸函數 inittree(Nds(Nds.Count - 1).Nodes, intId) Next End Sub
――――――――――――――――調用遞歸函數―――――――――――――――――― CreateReaderDataSet() inittree(Treepaybasic.Nodes, 999) ―――――――――――――――――生成數據集――――――――――――――――――― '生成數據集的函數 Private Sub CreateReaderDataSet() '在運行時連接,並設置連接屬性 MyConn = New System.Data.OleDb.OleDbConnection("Provider=MSDAORA.1;Data Source=oracle9;User ID=user;Password=****;") '設置SelectCommand命令 myAdapter.SelectCommand = New System.Data.OleDb.OleDbCommand("select * from treenode", MyConn) '填充數據集 myAdapter.Fill(mySet, "treenode") End Sub
發佈了51 篇原創文章 · 獲贊 0 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章