VisualBasic TreeNode aus Liste füllen

mabstrei

Cadet 4th Year
Registriert
Juli 2008
Beiträge
79
Hi,
hab eine Datei mit Produktgruppen die 3 Spalten durch ein , getrennt enthält.
Aufbau:

Bildschirme,TFT,17ZOLL
Bildschirme,TFT,19ZOLL
Bildschirme,Röhre,17Zoll
Bildschirme,Röhre,19Zoll
Komponenten,CPU,Intel
Komponenten,CPU,AMD
Komponenten,Grafik,ATI
Komponenten,Grafik,NVidia

Möchte damit einen TreeView füllen:
Bildschrime
-----TFT
--------17ZOLL
--------19ZOLL
-----Röhre
(ich glaube ihr wisst was ich meine)

Mom mach sichs so
Code:
        Dim filepath As String = "Produktgruppen.csv"
        Dim spalte1a As String = ""
        Dim spalte1n As String = ""
        Dim spalte2a As String = ""
        Dim spalte2n As String = ""
        Dim spalte3a As String = ""
        Dim spalte3n As String = ""
        Dim lines As String() = System.IO.File.ReadAllLines(filepath)

        For Each el As String In lines
            spalte1n = el.Split(",")(0)
            spalte2n = el.Split(",")(1)
            spalte3n = el.Split(",")(2)
            If spalte1n <> spalte1a Then
                tv_cat.Nodes.Add(spalte1n)
                spalte1a = spalte1n
            End If
            If spalte2n <> spalte2a Then
                tv_cat.Nodes.Item(spalte1a).Nodes.Add(spalte2n)
                spalte2a = spalte2n
            End If
            If spalte3n <> spalte3a Then
                tv_cat.Nodes.Item(spalte1a).Nodes.Item(spalte2a).Nodes.Add(spalte3n)
                spalte3a = spalte3n
            End If
        Next

Bekomme aber eine NULLExeception könnte mir evtl jemand helfen

THX
 
In welcher Zeile? Debug das Ganze mal.

Schätze mal es liegt an dem fehlenden Pfad zur csv-Datei.
 
Tritt der Fehler in Zeile 23 auf?
Code:
tv_cat.Nodes.Item(spalte1a).Nodes.Add(spalte2n)

Hier ist folgendes falsch: du übergibts im ersten Durchgang "Bildschirme" an die Funktion Item(Byval KeyIndex as String). Diese Funktion sucht aber nicht in der Eigenschaft "Text" sondern "Name". Die lässt du aber beim Hinzufügen immer leer.

Lösung: Einfach beim jedem hinzufügen die Eigenschaften Name und Text setzen. Praktischerweise hat die Methode add dafür schon eine Signatur:
Add(key as String, text as string)

Dein code müsste also heißen:

Code:
Dim filepath As String = "Produktgruppen.csv"
        Dim spalte1a As String = ""
        Dim spalte1n As String = ""
        Dim spalte2a As String = ""
        Dim spalte2n As String = ""
        Dim spalte3a As String = ""
        Dim spalte3n As String = ""
        Dim lines As String() = System.IO.File.ReadAllLines(filepath)

        For Each el As String In lines
            spalte1n = el.Split(",")(0)
            spalte2n = el.Split(",")(1)
            spalte3n = el.Split(",")(2)
            If spalte1n <> spalte1a Then
                [b]tv_cat.Nodes.Add(spalte1n, spalte1n)[/b]
                spalte1a = spalte1n
            End If
            If spalte2n <> spalte2a Then
                [b]tv_cat.Nodes.Item(spalte1a).Nodes.Add(spalte2n, spalte2n)[/b]
                spalte2a = spalte2n
            End If
            If spalte3n <> spalte3a Then
                [b]tv_cat.Nodes.Item(spalte1a).Nodes.Item(spalte2a).Nodes.Add(spalte3n,spalte3n)[/b]
                spalte3a = spalte3n
            End If
        Next

so sind "Name" und "Text" aller Nodes stets gleich. Hier musst du dann natürlich im weiteren Programmverlauf aufpassen, dass kein Name Doppelt vergeben wird.
 
Zuletzt bearbeitet:
Ja danke das wars
*freu*
thx
 
Zurück
Oben