TreeView einfacher befüllen

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von TimoOne.

    TreeView einfacher befüllen

    Hallo!
    Ich habe eine Reihe von Daten und möchte diese in einem TreeViewControol hinzufügen.
    Meine Daten (Beispieldaten) sehen so aus:
    Prozessor
    +AMD
    ++Athlon
    ++Athlon X2
    ++Athlon X3
    +Intel
    ++Celeron
    ++Duo
    ++Quad
    ++i3
    ++i5
    ++i7
    Arbeitsspeicher
    +DDR
    ++400MHz
    +DDR2
    ++533MHz
    ++667MHz
    ++800MHz
    +DDR3
    ++1333MHz
    ++1600MHz
    Die Tiefe der Nodes ist beliebig. Die Frage ist nun, wie mache ich das am besten? Gibt es eine vorgefertige Vorlage?

    Ich kenn nur folgende Variante:
    TreeView1.SelectedNode.Nodes.Add("item") TreeView1.Nodes(0).Nodes.Add("subitem")
    Aber da ich nicht vorher weiss wie tief die Nodes sein werden brauche ich eine automatisierte geschriebene Funktion für das hinzufügen von beliebigen Einträgen in beliebigen Tiefen. Könnt ihr mir helfen?

    Gibt es so ne Funktion wie...

    TreeView1.index(0).tiefe(1).Add("subitem")
    Damit ich für jeden EIntrag dementsprechend die Tiefe einstellen kann ohne manuell das hier zu schreiben: .nodes(0).nodes(1)....

    Also so was wie: stackoverflow.com/questions/42…ial-dataset-to-a-treeview
    Das ist aber C# aber das gibt es in Visual Basic 2010 nicht. Wie macht man den am besten wennn mann beliebige tiefere Einträge hinzufügen möchte?

    Danke im Vorraus! :)
    Danke für deine schnelle Antwort.
    Dummerweise habe ich jetzt grad eben auf Erledigt Button geklickt obwohl das nicht so ist. Ich wollte eigentlich auf Antworten klicken aber egal.

    Meine Daten liegen einfach vor: [Name],[Tiefe]
    Prozessor,0
    AMD,1
    Athlon,2
    Athlon X2,2
    Athlon X3,2
    Intel,1
    Celeron,2
    Duo,2
    Quad,2
    i3,2
    i5,2
    i7,2
    Arbeitsspeicher,0
    DDR,1
    400MHz,2
    DDR2,1
    533MHz,2
    667MHz,2
    800MHz,2
    DDR3,1
    1333MHz,2
    1600MHz,2

    Und wenn ich diese Daten erstmal in ein Array packe und dann mit TreeView1.Nodes.AddRang die Daten aus dem Array hole? Würde das funktionieren? Das wäre geil aber wie baut man ein Array für TreeView?
    Ich habe irgendwo einen Code gefunden:

    VB.NET-Quellcode

    1. Dim treeArray As TreeNode() = {}
    2. For i As Integer = 0 To 100
    3. ReDim Preserve treeArray(i)
    4. Dim newNode As New TreeNode("Test" & i.ToString())
    5. treeArray(i) = newNode
    6. Next
    7. TreeView1.Nodes.AddRange(treeArray)

    Aber wie kann ich im Array Tiefen (SubNodes) erstellen, so dass diese im TreeView problemlos angezeigt / aufgelistet werden kann? :)

    TimoOne schrieb:


    Meine Daten liegen einfach vor: [Name],[Tiefe]
    Prozessor,0
    AMD,1
    Athlon,2
    Athlon X2,2
    Athlon X3,2
    Intel,1
    Celeron,2
    Duo,2
    Quad,2
    i3,2
    i5,2
    i7,2
    Arbeitsspeicher,0
    DDR,1
    400MHz,2
    DDR2,1
    533MHz,2
    667MHz,2
    800MHz,2
    DDR3,1
    1333MHz,2
    1600MHz,2
    Das ist ein interessantes Format - das entspricht der Ausgabe eines rekursiven Durchganges.

    Den rekursiven Durchgang, bei dem diese Daten entstehen hast du vmtl nicht unter Kontrolle? weil da könnteman gleich eine Baumstruktur bilden, statt dieser eindimensionalen Darstellung.

    Was sind das für DatenObjekte? Optimal wäre, es wären Items mit je einer String-Property und einer Depth - Property.

    VB.NET-Quellcode

    1. Imports System.IO
    2. Public Class Form1
    3. Private _DataFile As String = Path.GetFullPath("..\..\Data.txt")
    4. Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
    5. Dim nodePath As New List(Of TreeNodeCollection)
    6. nodePath.Add(TreeView1.Nodes)
    7. Using rd = New StreamReader(_DataFile, True)
    8. While True
    9. Dim line = rd.ReadLine
    10. If line Is Nothing Then Return
    11. Dim splits = line.Split(","c)
    12. Dim depth = Integer.Parse(splits(1))
    13. nodePath.RemoveRange(depth + 1, nodePath.Count - (depth + 1))
    14. Dim nd = nodePath(depth).Add(splits(0))
    15. nodePath.Add(nd.Nodes)
    16. End While
    17. End Using
    18. End Sub
    19. End Class
    Dateien
    Einen schönen guten Morgen ErfinderDesRades,
    genau das wollte ich. Du bist der Beste. Vielen Dank für deine Hilfe und für dein funktionierender Code. :)
    Ich wäre auf sowas nie gekommen beziehungsweise ich hätte das nie alleine so schreiben können weil ich nicht genau wusste, wie ich das überhaupt aufbauen könnte. Danke nochmal für deine Lösung. :)