vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Brandneu! sevEingabe v3.0 - Das Eingabecontrol der Superlative!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Fortgeschrittene
Re: TreeView befüllen in VB2010 
Autor: Manfred X
Datum: 02.03.18 19:27

Ich weiß nicht, was Du unter "typisierten Tabellen" (s.o.) verstehst.

Ich nehme an, Du nutzt ein typisiertes Dataset.
In einem Dataset kannst Du geladene Tabellen
mit DataRelations verknüpfen (Fremdschlüssel).
Sie können auch im Dataset-Designer eingerichtet werden

Dann stehen Dir in den Tabellenzeilen "Childrows" zur Verfügung,
die Du direkt verwenden kannst, um eine hierarchische Knotenstruktur
daraus zu erstellen (geschachtelte Schleifenstruktur).

Ein einfaches Grundbeispiel (4 Tabellen, 3 Relations),
um die Vorgehensweise als Quellcode zu verdeutlichen:
Public Class frmDataset2Treeview
 
    Dim ds As New DataSet
 
    Dim trv As New TreeView With _
        {.Parent = Me, .Dock = DockStyle.Fill}
 
    Dim bs As New BindingSource
 
 
    Private Sub CreateTableData(ByVal dt As DataTable)
        'Hilfsfunktion
        Const n As Integer = 20
 
        dt.Columns.Add("ID", GetType(Integer))
        dt.Columns.Add("Value", GetType(String))
        dt.Columns.Add("Key", GetType(Integer))
        dt.PrimaryKey = {dt.Columns(0)}
 
        Dim rndm As New Random(123)
        For i As Integer = 0 To n - 1
            Dim row As DataRow = dt.NewRow
            row(0) = i
            row(2) = rndm.Next(0, n) 'Fremdschlüssel
            row(1) = dt.TableName & "_Value_" & row(2).ToString
            dt.Rows.Add(row)
        Next i
    End Sub
 
 
    Private Sub frmDataset2Treeview_Load(sender As Object,
                              e As EventArgs) Handles MyBase.Load
 
        'Im Dataset: 4 Tabellen mit Daten erzeugen
        For i As Integer = 1 To 4
            ds.Tables.Add(New DataTable With _
                 {.TableName = "DT" & i.ToString})
 
            CreateTableData(ds.Tables(i - 1))
        Next i
 
        'Tabellen verknüpfen / Datarelations erstellen
        'In jeder Tabelle ist ID die Schlüssel-Spalte (0), 
        'Key die Fremdschlüssel-Spalte (2) und 
        'Value die im Treeview anzuzeigende Datenspalte (1) 
        For i As Integer = 0 To ds.Tables.Count - 2
            Dim dr As New DataRelation _
             (ds.Tables(i).TableName & ds.Tables(i + 1).TableName,
              ds.Tables(i).Columns(0), ds.Tables(i + 1).Columns(2))
            ds.Relations.Add(dr)
        Next i
 
        'Diverse Hilfsvariablen 
        'Treeview-Knoten gemäß Datarelations erstellen
        Dim nd_i, nd_k, nd_l As TreeNode
        'aktuelle Datarow (Referenz) in den Schleifen
        Dim row_i, row_k, row_l, row_m As DataRow  
        'Name der Datarelation
        Dim rel_i, rel_k, rel_l As String       
        'Tabellen-Index der im TRV anzuzeigenden Spalte   
        Dim col_i, col_k, col_l, col_m As Integer  
        'anzuzeigender Daten-Wert im Treeview        
        Dim val_i, val_k, val_l As String    
 
        For i As Integer = 0 To ds.Tables(0).Rows.Count - 1
 
            row_i = ds.Tables(0).Rows(i)
            col_i = 1
            val_i = row_i(col_i).ToString
            nd_i = GetNode(trv.Nodes, val_i)
            rel_i = ds.Relations(0).RelationName
 
            For k As Integer = 0 To _
                row_i.GetChildRows(rel_i).Length - 1
 
                row_k = row_i.GetChildRows(rel_i)(k)
                col_k = 1
                val_k = row_k(col_k).ToString
                nd_k = GetNode(nd_i.Nodes, val_k)
                rel_k = ds.Relations(1).RelationName
 
                For l As Integer = 0 To _
                    row_k.GetChildRows(rel_k).Length - 1
 
                    row_l = row_k.GetChildRows(rel_k)(l)
                    col_l = 1
                    val_l = row_l(col_l).ToString
                    nd_l = GetNode(nd_k.Nodes, row_l(1).ToString)
                    rel_l = ds.Relations(2).RelationName
 
                    For m As Integer = 0 To _
                        row_l.GetChildRows(rel_l).Length - 1
 
                        row_m = row_l.GetChildRows(rel_l)(m)
                        col_m = 1
                        val_l = row_m(col_m).ToString
                        GetNode(nd_l.Nodes, val_l)
                    Next m
                Next l
            Next k
        Next i
 
    End Sub
 
 
    Private Function GetNode(nodes As TreeNodeCollection, Key As String,
                             Optional ByVal text As String = "") As TreeNode
        Dim ind As Integer = nodes.IndexOfKey(Key)
        If ind >= 0 Then Return nodes(ind)
        If String.IsNullOrWhiteSpace(text) Then text = Key
        Return nodes.Add(Key, text)
    End Function
End Class


Beitrag wurde zuletzt am 02.03.18 um 19:45:47 editiert.
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
TreeView befüllen in VB20103.870ERBRU28.02.18 11:42
Re: TreeView befüllen in VB20102.730Souffleurlos28.02.18 16:00
Re: TreeView befüllen in VB20102.661ERBRU28.02.18 16:29
Beispiel: Datarow-Spaltenwerte in TreeView eintragen2.774Manfred X01.03.18 06:15
Re: TreeView befüllen in VB20102.668ERBRU01.03.18 13:36
Re: TreeView befüllen in VB20102.662Manfred X01.03.18 17:42
Re: TreeView befüllen in VB20102.660ERBRU02.03.18 14:05
Re: TreeView befüllen in VB20102.661Manfred X02.03.18 19:27
Re: TreeView befüllen in VB20102.608ERBRU03.03.18 19:45
Re: TreeView befüllen in VB20102.684Manfred X04.03.18 08:33
Re: TreeView befüllen in VB20102.558ERBRU04.03.18 13:16
Re: TreeView befüllen in VB20102.636Franki05.03.18 05:05
Re: TreeView befüllen in VB20102.525ERBRU08.03.18 14:45
Re: TreeView befüllen in VB20102.567Manfred X08.03.18 19:12
Re: TreeView befüllen in VB20102.545ERBRU08.03.18 19:26
Re: TreeView befüllen in VB20102.583Manfred X09.03.18 07:07
Re: TreeView befüllen in VB20102.581ERBRU09.03.18 08:50
Re: TreeView befüllen in VB20102.643Manfred X09.03.18 11:18
Re: TreeView befüllen in VB20102.566ERBRU09.03.18 15:08
Re: TreeView befüllen in VB20102.565Manfred X09.03.18 15:57
Re: TreeView befüllen in VB20102.519ERBRU09.03.18 19:01
Re: TreeView befüllen in VB20102.561Manfred X09.03.18 22:27
Re: TreeView befüllen in VB20102.430ERBRU10.03.18 09:42
Re: TreeView befüllen in VB20102.507Manfred X10.03.18 10:49
Re: TreeView befüllen in VB20102.477ERBRU10.03.18 10:58
Re: TreeView befüllen in VB20102.449Manfred X10.03.18 11:28
Re: TreeView befüllen in VB20102.482ERBRU10.03.18 12:44
Re: TreeView befüllen in VB20102.456Manfred X10.03.18 12:57
Re: TreeView befüllen in VB20102.436ERBRU10.03.18 13:29
Re: TreeView befüllen in VB20102.427Manfred X10.03.18 14:20
Re: TreeView befüllen in VB20102.424ERBRU10.03.18 16:14
Re: TreeView befüllen in VB20102.643Franki04.03.18 05:57
Re: TreeView befüllen in VB20102.556ERBRU09.03.18 08:38
Re: TreeView befüllen in VB20102.407Franki11.03.18 01:58
Re: TreeView befüllen in VB20102.467Manfred X11.03.18 10:41
Re: TreeView befüllen in VB20102.390ERBRU11.03.18 11:37
Re: TreeView befüllen in VB20102.472Manfred X11.03.18 12:49
Re: TreeView befüllen in VB20102.485ERBRU11.03.18 17:48
Re: TreeView befüllen in VB20102.430Manfred X12.03.18 06:21
Re: TreeView befüllen in VB20102.433ERBRU12.03.18 10:22
Re: TreeView befüllen in VB20102.479Manfred X12.03.18 11:34
Re: TreeView befüllen in VB20102.392ERBRU12.03.18 12:13
Re: TreeView befüllen in VB20102.443Manfred X12.03.18 12:31
Re: TreeView befüllen in VB20102.526ERBRU12.03.18 13:11
Re: TreeView befüllen in VB20102.471ERBRU12.03.18 15:37
Re: TreeView befüllen in VB20102.417ERBRU15.03.18 19:36

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel