2011-10-28 115 views
0

我試圖pupulate上的目錄結構的樹形節點基地這樣基於URL結構.NET

Dim arrLinks() As String = Split(Url, "/") 

For i As Integer = 0 To arrLinks.Length 
    If tvwDirs.Nodes.ContainsKey(arrLinks(0)) = False Then 
     tvwDirs.Nodes.Add(arrLinks(0), arrLinks(0)) 
    End If 
Next 

上面的代碼適用於添加底座/父節點創建TreeView節點

說我有urllike在這種情況下,該example.com/dir1/dir2/file

,應該建立在父節點的子節點DIR2 DIR1

我越來越糊塗添加子節點到各現有節點

回答

1

您將要遇到的第一個問題是基於您的for語句的異常;您應該將其更改爲:

For i As Integer = 0 To arrLinks.Length - 1 

,或者我的偏好:

For each nodeKey as String in arrLinks 

下一個問題是,節點集合不包含所有在整個樹中的節點,它僅包含頂級節點。此列表中的每個節點都有自己的一組子節點,每個子節點都有子節點等。

這意味着當您添加每個節點時,需要跟蹤最後一個父節點並添加下一個子節點添加到該父節點或跟蹤要添加到的級別的當前節點集合。

這將導致代碼類似於以下內容(您可能需要調整NodeCollection和Node的類名稱以及可能的Add語句(如果添加返回節點,則不記得頂部)):

Dim arrLinks() As String = Split(Url, "/") 
Dim cNodes as NodeCollection 

' Keep track of the current collection of nodes, starting with the tree's top level collection 
cNodes = tvwDirs.Nodes 

For each nodeKey As String in arrLinks 
    Dim currentNode as Node 

    If Not cNodes.ContainsKey(nodeKey) Then 
     ' If the key is not in the current collection of nodes, add it and record the resultant record 
     currentNode = cNodes.Add(nodeKey, nodeKey) 
    Else 
     ' Otherwise, record the current node 
     currentNode = cNodes(nodeKey) 
    End If 
    ' Store the set of nodes that the next nodeKey will be added to 
    cNodes = currentNode.Nodes 
Next 
+0

感謝您的幫助,我需要添加圖像到樹基於節點級別的視圖,具有子節點的任何節點都將是文件夾,並且沒有文件/感謝 – Smith

0

未經測試,可以包含語法或拼寫錯誤:

Sub MakeTreeNodes 
    Dim tURI As Uri = New Uri("proto://domain.tld/dir1/dir2/dir3") 
    Dim tNode as TreeNode = New TreeNode(tURI.DnsSafeHost) 

    If 1 < tURI.Segments.Length 
    CreateNode(tURI.Segments, 1, tNode) 
    End If 

    SomeTreeView.Nodex.Add(tNode) 

End Sub 


Private Sub CreateNode(byval tSegments() As String, ByVal tIndex As Int16, ByRef tParentNode As TreeNode) As TreeNode 

    Dim tNode As TreeNode = New TreeNode(tSegments(tIndex)) 

    If (tSegments.Length - 1) < tIndex 
    CreateNode(tSegments, tIndex + 1, tNode) 
    End If 

    tParentNode.Nodes.Add(tNode) 

End Function 

簡要說明: MakeTreeNodes()的入口點。我建議修改它來接受一個字符串URL,以及可能的URI重載。 它使用URI的主機名稱創建一個根節點。

然後它調用遞歸函數CreateNode()。這將創建一個包含當前段的新TreeNode,然後調用自己傳遞新創建的節點和下一個索引值。 遞歸函數是非常標準的。

+0

謝謝,但我得到了很多erros,並不能解決它,因爲我dony瞭解你algorithim – Smith

+0

什麼樣的錯誤? –

+0

它將基礎url添加爲每個父節點,然後在每個父節點下添加目錄。這是爲了添加一個父節點,這是主機,例如'www.example.com',然後添加第一個目錄作爲主機的子節點,等等 – Smith