Frage zu Treeview

  • VB.NET

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von lris08.

    Frage zu Treeview

    Hallo,

    bitte entschuldigt, aber ich muss noch mal auf das Thema TreeView zurück kommen.

    Komme leider überhaupt nicht mehr weiter und möcht euch noch mal um Hilfe bitten...


    Versuche in einem TreeView etwas zu selectieren und markieren.


    Der Aufbau ist so, dass ich erst ein Treeview fülle, mit Daten aus einer Datenbank
    ID SubID Text

    Anschließend wird ein Datensatz erstellt, in dem ich aus dem gerade eben gefüllten Treeview einen Wert zuordne.

    Wenn ich anschließend diesen Datensatz, wo zu vor ein Eintrag zugeordnet wird wieder aufrufe, soll genau dieser Eintrag im Treeview markiert werde.

    Der Datensatz schau so aus:
    ID TreeViewID Bezeichnung ... usw.

    Was heißt, daß ich im Datensatz die ID des Treevieweintrages speichere. Über diese ID vom Treeview möcht/muss ich dann wieder suchen und markieren können.

    Mein derzeitiger Code zum suchen, wird jedoch immer nur der erste Eintrag im Treeview markiert.

    VB.NET-Quellcode

    1. ' Kategorie ist die ID des Treevieweintrages
    2. For Each tvnode As TreeNode In TreeView1.Nodes
    3. If tvnode.Tag() = Kategorie Then
    4. TreeView1.Focus()
    5. TreeView1.Select()
    6. End If
    7. Next


    Ich komm da einfach nicht weiter, alles lesen bei MSDN und Galileo hat mir bisher nicht geholfen...

    Hiffe auf eure Hilfe...

    Danke vorab und schönen Fr. noch...

    Alex


    EDIT:

    So fülle ich mein TreeView:

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub Kategorie_Laden()
    2. TreeView1.Nodes.Clear()
    3. Dim dt As DataTable = New DataTable("TreeView")
    4. Me.TV1_Datentabelle_fuellen(dt)
    5. Me.TV1_HauptNode_fuellen(dt)
    6. Me.TreeView1.ExpandAll()
    7. End Sub
    8. Public Sub TV1_Datentabelle_fuellen(ByRef dt As DataTable)
    9. Timer1.Start()
    10. Try
    11. Dim sCN As String = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source =" & Archiv_aktiv
    12. Dim sql As String = "SELECT * FROM " & Tabelle08 & " ORDER BY ID"
    13. Dim cn As OleDb.OleDbConnection = New OleDb.OleDbConnection(sCN)
    14. Dim da As OleDb.OleDbDataAdapter = New OleDb.OleDbDataAdapter(sql, cn)
    15. Dim cmd As OleDb.OleDbCommandBuilder = New OleDb.OleDbCommandBuilder(da)
    16. da.Fill(dt)
    17. Catch ex As OleDb.OleDbException
    18. Fehlermeldung = ex.Message & " - Fehler: Kategorieverwaltung, TV1_Datentabelle_fuellen "
    19. Fehler_Instance.Ausgabe(Fehlermeldung)
    20. Finally
    21. ToolStripProgressBar1.Value = 100
    22. End Try
    23. End Sub
    24. Public Sub TV1_HauptNode_fuellen(ByVal dt As DataTable)
    25. Me.TreeView1.BeginUpdate()
    26. 'Dim ParentId As Integer
    27. Dim Tn As TreeNode
    28. For Each r As DataRow In dt.Rows
    29. Tn = New TreeNode((r("Kat_Tag").ToString))
    30. Tn.Tag = (r("ID").ToString)
    31. Tn.ImageIndex = 0
    32. Tn.SelectedImageIndex = 1
    33. If Convert.ToInt32(r("Kat_ParentID")) = 0 Then
    34. Me.TreeView1.Nodes.Add(Tn)
    35. End If
    36. TV1_SubNode_fuellen(Tn, dt, Convert.ToInt32(r("ID")))
    37. Next
    38. Me.TreeView1.EndUpdate()
    39. End Sub
    40. Public Sub TV1_SubNode_fuellen(ByRef tn As TreeNode, ByRef dt As DataTable, ByVal ID As Integer)
    41. Dim foundRows() As DataRow = dt.Select("Kat_ParentID = " + ID.ToString, "ID")
    42. Dim Tn_Sub As TreeNode
    43. For Each _r As DataRow In foundRows
    44. Tn_Sub = New TreeNode((_r("Kat_Tag").ToString))
    45. Tn_Sub.Tag = (_r("ID").ToString)
    46. Tn_Sub.ImageIndex = 0
    47. Tn_Sub.SelectedImageIndex = 1
    48. tn.Nodes.Add(Tn_Sub)
    49. TV1_SubNode_fuellen(Tn_Sub, dt, Convert.ToInt32(_r("ID")))
    50. Next
    51. End Sub

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „lris08“ ()

    ok... danke für deine Antwrot...

    Habs damit auch probiert...

    Bei Key - siehe Bild ... steht nicht zur Verfügung...


    bei Name gibts die Meldung: Ungültige Konvertierung von der Zeichenfolge in Typ Double.
    Kategorie ist aber ein Integer, also eine Zahl... nämlich die gespeicherte ID des Treevieweintrages...




    EDIT: Habe gerade noch mal was versucht, anscheinend gibts hier ein Problem mit der for each schleife...
    rvnode.Tag() hat den richtigen Eintrag (die ID) , aber die schleife bleibt immer am ersten Eintrag stehen...

    VB.NET-Quellcode

    1. Dim i As Integer
    2. For Each tvnode As TreeNode In TreeView1.Nodes
    3. If tvnode.Tag() = Kategorie Then
    4. i = tvnode.Index()
    5. TreeView1.Focus()
    6. TreeView1.Select()
    7. MsgBox("Kat_suchen " & i & " " & tvnode.Tag()) ' Dies nur zum Test was in den Feldern steht - Gedankenstütze"
    8. End If
    9. Next
    Bilder
    • VBP_3.jpg

      29,73 kB, 356×188, 86 mal angesehen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „lris08“ ()

    Ich habs hinbekommen ... ole !

    VB.NET-Quellcode

    1. Dim i As Integer
    2. For Each tvnode As TreeNode In TreeView1.Nodes
    3. If tvnode.Tag() = Kategorie Then
    4. i = tvnode.Index()
    5. Me.TreeView1.SelectedNode = Me.TreeView1.Nodes(i)
    6. TreeView1.Focus()
    7. End If
    8. Next


    So sucht er die den passenden Eintrag anhand der zuvor gespeicherten ID heraus, markiert und fokusiert diese...