vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Erstellen von dynamischen Kontextmen?s - wann immer Sie sie brauchen!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
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 VB20104.353ERBRU28.02.18 11:42
Re: TreeView befüllen in VB20103.097Souffleurlos28.02.18 16:00
Re: TreeView befüllen in VB20103.015ERBRU28.02.18 16:29
Beispiel: Datarow-Spaltenwerte in TreeView eintragen3.147Manfred X01.03.18 06:15
Re: TreeView befüllen in VB20103.035ERBRU01.03.18 13:36
Re: TreeView befüllen in VB20103.018Manfred X01.03.18 17:42
Re: TreeView befüllen in VB20103.026ERBRU02.03.18 14:05
Re: TreeView befüllen in VB20103.020Manfred X02.03.18 19:27
Re: TreeView befüllen in VB20102.985ERBRU03.03.18 19:45
Re: TreeView befüllen in VB20103.048Manfred X04.03.18 08:33
Re: TreeView befüllen in VB20102.933ERBRU04.03.18 13:16
Re: TreeView befüllen in VB20103.000Franki05.03.18 05:05
Re: TreeView befüllen in VB20102.945ERBRU08.03.18 14:45
Re: TreeView befüllen in VB20102.941Manfred X08.03.18 19:12
Re: TreeView befüllen in VB20102.915ERBRU08.03.18 19:26
Re: TreeView befüllen in VB20102.950Manfred X09.03.18 07:07
Re: TreeView befüllen in VB20102.939ERBRU09.03.18 08:50
Re: TreeView befüllen in VB20102.998Manfred X09.03.18 11:18
Re: TreeView befüllen in VB20102.930ERBRU09.03.18 15:08
Re: TreeView befüllen in VB20102.931Manfred X09.03.18 15:57
Re: TreeView befüllen in VB20102.898ERBRU09.03.18 19:01
Re: TreeView befüllen in VB20102.925Manfred X09.03.18 22:27
Re: TreeView befüllen in VB20102.827ERBRU10.03.18 09:42
Re: TreeView befüllen in VB20102.877Manfred X10.03.18 10:49
Re: TreeView befüllen in VB20102.851ERBRU10.03.18 10:58
Re: TreeView befüllen in VB20102.813Manfred X10.03.18 11:28
Re: TreeView befüllen in VB20102.850ERBRU10.03.18 12:44
Re: TreeView befüllen in VB20102.825Manfred X10.03.18 12:57
Re: TreeView befüllen in VB20102.804ERBRU10.03.18 13:29
Re: TreeView befüllen in VB20102.784Manfred X10.03.18 14:20
Re: TreeView befüllen in VB20102.780ERBRU10.03.18 16:14
Re: TreeView befüllen in VB20103.064Franki04.03.18 05:57
Re: TreeView befüllen in VB20102.923ERBRU09.03.18 08:38
Re: TreeView befüllen in VB20102.763Franki11.03.18 01:58
Re: TreeView befüllen in VB20102.831Manfred X11.03.18 10:41
Re: TreeView befüllen in VB20102.740ERBRU11.03.18 11:37
Re: TreeView befüllen in VB20102.825Manfred X11.03.18 12:49
Re: TreeView befüllen in VB20102.858ERBRU11.03.18 17:48
Re: TreeView befüllen in VB20102.783Manfred X12.03.18 06:21
Re: TreeView befüllen in VB20102.789ERBRU12.03.18 10:22
Re: TreeView befüllen in VB20102.836Manfred X12.03.18 11:34
Re: TreeView befüllen in VB20102.770ERBRU12.03.18 12:13
Re: TreeView befüllen in VB20102.808Manfred X12.03.18 12:31
Re: TreeView befüllen in VB20102.886ERBRU12.03.18 13:11
Re: TreeView befüllen in VB20102.831ERBRU12.03.18 15:37
Re: TreeView befüllen in VB20102.789ERBRU15.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-2025 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