Treeview durchsuchbar ? Geht sowas?

  • VB.NET

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

    Treeview durchsuchbar ? Geht sowas?

    Hi,

    habe ein bestehendes Treeview, was ich mit Daten aus einer Datenbank fülle...
    Darstellung als Baumstruktur...
    HauptTreeNode und SubTreenode

    Besteht die Möglichkeit, daß ich dieses Treeview durche?

    Also, TextboxX , Button, Klick --- durchsucht das Treeview und markiert die passenden Stellen...

    Geht sowas überhaupt?

    LG
    lris08
    Nach einem Begriff oder einem ganzen Wort...

    In Treeview steht:
    Hauptkategorie, Nebenkategorie

    Suche starten: Betriff: %Haut%

    markiert sollen alle einträge werden die Haupt haben

    oder

    der Begriff %Kate%
    und schon sollen alle markiert werden die Kate enthalten


    EDIT: möchte nur den Tag durchsuchen -
    diese werbseite kann nicht angezeigt werden kommt da bei mir...

    ok , aber wenn Multiselect nicht geht, muß ich es anders gestallten...
    sprich nur mit den DB Einträgen das Treeview füllen lassen, die diesem kriterium entsprechen...

    würde das gehen ?

    Aber könnte mir vorstellen, daß die auch problematisch ist... wenn z.B. ein SubTreenode den gesuchten Begriff enthält aber der HauptTreenNode nicht...

    Gugi schrieb:

    meinst du sowas? :

    VB.NET-Quellcode

    1. For Each tvnode As TreeNode In TreeView1.Nodes
    2. If tvnode.Text.Contains("suchtext") Then
    3. 'was weis ich was passieren soll wenn er es enthält^^
    4. End If
    5. Next





    Ja könnte schon sein :)

    jetzt müßt ich ihn nur noch dazu bringen, daß er mit auch Position markiert...

    Es muß ja auch keine Multiselect sein - vielleicht könnte mann es so lösen.

    suche starten, markiere den ersten gefundenen Ausdruck, oder weiter, suche nächsten und markiere
    Also habe noch mal bisserl rumgeschaut google & co

    also wäre schon total zufrieden, wenn ich nach einem Suichbegriff suchen könnte und er mir dann immer den ersten den er findet markiert, bzg. button weitersuchen bis zum nächsten Eintrag...

    Das sollte aber funktionieren odeR?


    EDIT - mein Code bisher:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub Kat_Laden()
    2. Dim dt As DataTable = New DataTable("TreeView")
    3. Me.FillDataTable(dt)
    4. Me.FillTreeView(dt)
    5. Me.TreeView1.ExpandAll()
    6. End Sub
    7. Public Sub FillDataTable(ByRef dt As DataTable)
    8. Try
    9. Dim sCN As String = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source =" & Datenbankpfad & "\" & Datenbankname & ".mdb"
    10. Dim sql As String = "SELECT * FROM " & TableName08 & " ORDER BY ID"
    11. Dim cn As OleDb.OleDbConnection = New OleDb.OleDbConnection(sCN)
    12. Dim da As OleDb.OleDbDataAdapter = New OleDb.OleDbDataAdapter(sql, cn)
    13. Dim cmd As OleDb.OleDbCommandBuilder = New OleDb.OleDbCommandBuilder(da)
    14. da.Fill(dt)
    15. Catch ex As OleDb.OleDbException
    16. MsgBox(ex.Message)
    17. End Try
    18. End Sub
    19. Public Sub FillTreeView(ByVal dt As DataTable)
    20. Me.TreeView1.BeginUpdate()
    21. 'Dim ParentId As Integer
    22. Dim Tn As TreeNode
    23. For Each r As DataRow In dt.Rows
    24. Tn = New TreeNode((r("Kat_Tag").ToString))
    25. Tn.Tag = (r("ID").ToString)
    26. If Convert.ToInt32(r("Kat_ParentID")) = 0 Then
    27. Me.TreeView1.Nodes.Add(Tn)
    28. End If
    29. FillTreeNode_Sub(Tn, dt, Convert.ToInt32(r("ID")))
    30. Next
    31. Me.TreeView1.EndUpdate()
    32. End Sub
    33. Public Sub FillTreeNode_Sub(ByRef tn As TreeNode, ByRef dt As DataTable, ByVal ID As Integer)
    34. Dim foundRows() As DataRow = dt.Select("Kat_ParentID = " + ID.ToString, "ID")
    35. Dim Tn_Sub As TreeNode
    36. For Each _r As DataRow In foundRows
    37. Tn_Sub = New TreeNode((_r("Kat_Tag").ToString))
    38. Tn_Sub.Tag = (_r("ID").ToString)
    39. tn.Nodes.Add(Tn_Sub)
    40. FillTreeNode_Sub(Tn_Sub, dt, Convert.ToInt32(_r("ID")))
    41. Next
    42. End Sub


    EDIT2 - Hab nun schon mal eine Möglichkeit gefunden zu suchen - Tolle Lösung, klappt aber noch nicht ganz ...

    Den Text den ich in Textbox4 eingebe, wird sofort Zeitgleich gesucht - funktioniert schon mal - er makierung im treeview selbst fehlt noch... aber er findet schon was.... weil es über Treeview anscheinend unselectes markiert wird und in anderen Textboxen ausgegeben wird.

    Dann fehlt mir noch die möglichkeit nach einer Option - suche weiter...
    und das er Groß- und kleinschreibung übergehen soll...

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Function FindNode(tncoll As TreeNodeCollection, strText As [String]) As TreeNode
    2. Dim tnFound As TreeNode
    3. For Each tnCurr As TreeNode In tncoll
    4. If tnCurr.Text.Contains(strText) Then
    5. Return tnCurr
    6. End If
    7. tnFound = FindNode(tnCurr.Nodes, strText)
    8. If tnFound IsNot Nothing Then
    9. Return tnFound
    10. End If
    11. Next
    12. Return Nothing
    13. End Function
    14. Private Sub TextBox4_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox4.TextChanged
    15. TreeView1.SelectedNode = FindNode(TreeView1.Nodes, TextBox4.Text)
    16. TreeView1.Focus()
    17. TextBox4.Focus()
    18. End Sub
    19. Private Sub TreeView1_AfterSelect(ByVal sender As System.Object, ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles TreeView1.AfterSelect
    20. TextBox2.Text = e.Node.Tag
    21. Dim con As New OleDb.OleDbConnection
    22. Dim cmd As New OleDb.OleDbCommand
    23. Dim reader As OleDb.OleDbDataReader
    24. ' Die derzeit ausgewählte Datenbank erfassen
    25. con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source =" & Datenbankpfad & "\" & Datenbankname & ".mdb"
    26. cmd.Connection = con
    27. cmd.CommandText = "SELECT * FROM " & TableName08 & " WHERE ID=" & e.Node.Tag
    28. Try
    29. con.Open()
    30. reader = cmd.ExecuteReader()
    31. Do While reader.Read()
    32. TextBox3.Text = reader("Kat_Tag").ToString()
    33. Treeview_Untekategorie = reader("Kat_Text").ToString()
    34. Loop
    35. Catch ex As Exception
    36. MsgBox(ex.Message)
    37. Return
    38. Finally
    39. 'reader.Close()
    40. con.Close()
    41. End Try
    42. End Sub
    Bilder
    • Image4.png

      36,8 kB, 687×578, 422 mal angesehen

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