Kennt sich jemand mit Treeviews aus?

  • Access

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von darthmaik12.

    Kennt sich jemand mit Treeviews aus?

    Wie kann ich die Unterknoten eines Hauptknoten erst erstellen/laden, wenn ich sie ausklappe.

    Grund: Ich habe sehr viele Unterpunkte und das aufbauen des Treeviews dauert sehr lange. Versuche damit die Ladezeiten zu verkürzen.
    Naja du kannst halt erstmal die Mainnodes laden. Dann im OnClick des jeweiligen Nodes die Subnodes dazuladen.
    »There's no need to "teach" atheism. It's the natural result of education without indoctrination.« — Ricky Gervais
    Du erstellst einen Eventhandler bezüglich des TreeViewOnNodeClick Events. (msdn.microsoft.com/de-de/libra…mouseclick(v=vs.110).aspx)
    Anschließend kannst du mit mit e.Node erkennen welche Node gedrückt wurde. Danach musst du nurnoch die UnterPunkte anzeigen (z.B. neu hinzufügen oder Sichtbarkeit ändern)
    Mfg: Gather
    Private Nachrichten bezüglich VB-Fragen werden Ignoriert!


    ich habe das in einem anderem Forum gefunden, damit der nicht jedes mal den Record durchsucht.

    Der View

    VB.NET-Quellcode

    1. select
    2. choose(s.ebene,
    3. 'Knoten1' & s.abschnitt,
    4. 'Knoten2' & s.abteilung,
    5. 'Knoten3' & s.abteilung & s.gruppe,
    6. 'Knoten4' & s.abteilung & s.gruppe & s.untergruppe
    7. ) as key,
    8. choose(s.ebene,
    9. Null,
    10. 'Knoten1' & s.abschnitt,
    11. 'Knoten2' & s.abteilung,
    12. 'Knoten3' & s.abteilung & s.gruppe
    13. ) as parent,
    14. choose(s.ebene,
    15. s.abschnitt & ' - ' & s.wz2008bezeichnung
    16. s.abteilung & ' - ' & s.wz2008bezeichnung
    17. s.abteilung & s.gruppe & '0 ' & s.wz2008bezeichnung
    18. s.abteilung & s.gruppe & s.untergruppe & '' - '' & s.wz2008bezeichnung
    19. ) as title,
    20. iif(s.ebene = 1, Null, 4) As nodeType
    21. from dbo_Stamm_Nace s
    22. order by
    23. s.ebene,
    24. s.abschnitt,
    25. s.abteilung,
    26. s.gruppe,
    27. s.untergruppe


    Der VBA Code

    VB.NET-Quellcode

    1. Set rs = DBEngine(0)(0).OpenRecordset("vw_tree_nodes", dbOpenSnapshot)
    2. Do While not rs.eof
    3. objTreeview.Nodes.Add rs!parent, rs!nodeType, rs!key, rs!title
    4. rs.MoveNext
    5. Loop
    6. rs.close



    Problem ist, ich versteh nicht wie er den View baut.
    Hi.

    Wie baust du denn deinen Treeview aktuell auf?

    Damit?:

    Visual Basic-Quellcode

    1. Set rs = DBEngine(0)(0).OpenRecordset("vw_tree_nodes", dbOpenSnapshot)
    2. Do While not rs.eof
    3. objTreeview.Nodes.Add rs!parent, rs!nodeType, rs!key, rs!title
    4. rs.MoveNext
    5. Loop
    6. rs.close


    ??

    Dann geh ich davon aus das damit nur die Parents geladen werden würden:

    Visual Basic-Quellcode

    1. Set rs = DBEngine(0)(0).OpenRecordset("select parent, nodeType, key, title from vw_tree_nodes where parent is null", dbOpenSnapshot)
    2. Do While not rs.eof
    3. objTreeview.Nodes.Add rs!parent, rs!nodeType, rs!key, rs!title
    4. rs.MoveNext
    5. Loop
    6. rs.close



    Dann in der Form im Codebehind verwendest du dann:

    Visual Basic-Quellcode

    1. Private Sub Treeview_NodeClick(ByVal selectedNode As Object)
    2. If selectedNode is not nothing
    3. ' hier dann die subnodes adden
    4. End Sub
    Das ist meine Signatur und sie wird wunderbar sein!

    VB.NET-Quellcode

    1. 'Knotenpunkte werden deklariert
    2. Dim rstHauptArtikelgruppen As DAO.Recordset
    3. Dim rstArtikelgruppen As DAO.Recordset
    4. Dim rstArtikel As DAO.Recordset
    5. 'Objectetyp des Treeview wird deklariert
    6. Dim objNode As MSComctlLib.Node
    7. Set db = CurrentDb
    8. Set rstHauptArtikelgruppen = db.OpenRecordset("SELECT dbo_Artikelgruppen.Hauptartikelgruppe, Bezeichnung FROM dbo_Artikelgruppen WHERE ([Gruppenebene]) = 1 and (([Hauptartikelgruppe]= '100') or ([Hauptartikelgruppe]= '200') or ([Hauptartikelgruppe]= '300') )")
    9. Set objTreeview = Me!TreeView_AGR.Object
    10. Do While Not rstHauptArtikelgruppen.EOF
    11. 'Aufbau der Ansicht der Hauptknoten
    12. Set objNode = objTreeview.Nodes.Add(, , "Hauptartikelgruppen" & rstHauptArtikelgruppen![Hauptartikelgruppe], rstHauptArtikelgruppen!Hauptartikelgruppe & " - " & rstHauptArtikelgruppen!Bezeichnung)
    13. Set rstArtikelgruppen = db.OpenRecordset("Select Artikelgruppe, Bezeichnung from dbo_KHKArtikelgruppen where [Hauptartikelgruppe] = '" & rstHauptArtikelgruppen!Hauptartikelgruppe & "'")
    14. Do While Not rstArtikelgruppen.EOF
    15. Set objNode = objTreeview.Nodes.Add("Hauptartikelgruppen" & rstHauptArtikelgruppen![Hauptartikelgruppe], tvwChild, "Artikelgruppen" & rstArtikelgruppen![Artikelgruppe], rstArtikelgruppen!Artikelgruppe & " - " & rstArtikelgruppen!Bezeichnung)
    16. Set rstArtikel = db.OpenRecordset("SELECT * FROM dbo_KHKArtikel WHERE [Artikelgruppe] = '" & rstArtikelgruppen![Artikelgruppe] & "'")
    17. ' Do While Not rstArtikel.EOF
    18. ' Set objNode = objTreeview.Nodes.Add("Artikelgruppen" & rstArtikelgruppen![Artikelgruppe], tvwChild, "Artikel" & rstArtikel![Artikelnummer], rstArtikel![Artikelnummer] & "/" & rstArtikel!Matchcode)
    19. ' rstArtikel.MoveNext
    20. ' Loop
    21. rstArtikelgruppen.MoveNext
    22. Loop
    23. rstHauptArtikelgruppen.MoveNext
    24. Loop
    25. 'Debug.Print "Langsam: " & lngTime
    26. Set objNode = Nothing
    27. 'rst.Close
    28. Set rst = Nothing
    29. Set db = Nothing


    So baue ich ihn aktuell auf aber das ist bei vielen Daten einfach zu langsam.
    Bin in auf der Suche nach einer schnelleren Methode