Sortieren von TreeView funktioniert nur einmal

  • VB.NET

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von Yunkie.

    Sortieren von TreeView funktioniert nur einmal

    Moin zusammen,

    ich habe ein Problem mit meiner TreeView. Ich verwende die Methode .Sort() zum sortieren der TreeView. Das funktioniert genau einmal korrekt (beim Programmaufruf). Das Sortieren findet in einer Funktion statt und ich mache nichts anderes als die Funktion erneut aufzurufen. Danach stimmen jedoch die TreeView.Nodes.Name Attribute nicht mehr. Warum?

    Ich komm nicht dahinter, warum es beim erstmaligen Sortieren funktioniert und bei darauf folgenden Sortiervorgängen nicht!

    Ich könnte verstehen wenn es an dem Sortier-Algorithmus liegt. Warum dann aber nicht beim ersten mal?

    Kurz noch eine Erläuterung was der nachfolgende Code tun soll.
    Diese Funktion soll ein TreeView Von Mitarbeitern und Firmen zur Verfügung stellen:


    Personalverwaltung
    Firma
    Mitarbeiter(A)
    Mitarbeiter(B)
    Mitarbeiter(C)
    Firma
    Mitarbeiter(A)
    Mitarbeiter(B)
    Mitarbeiter(C)

    Wie gesagt, es funktioniert einmalig. Wenn ich die Funktion erneut aufrufe führe ich vorher ein TreeView.Clear() aus. Kann es sein, das die Nodes nicht wirklich gelöscht werden? Gibt es andere Möglichkeiten das TreeView "sauber" zu bekommen um es letztendlich neu befüllen zu können?

    Kann vielleicht mal jemand drüber gucken? :-S Bitte achtet nicht auf die Namenswahl der Variablen ;)

    VB.NET-Quellcode

    1. Public Function GetMitarbeiterTreeView(ByRef TreeView As TreeView, Optional ByRef StatusBar As ProgressBar = Nothing, Optional ByRef ToolStripProgressBar As ToolStripProgressBar = Nothing, Optional ByVal Inaktive As Boolean = False) As Boolean
    2. Dim UIDs As List(Of Integer) = GetUIDFromRohdaten(Inaktive)
    3. Dim Var As String = Nothing
    4. Dim Merker As Boolean = False
    5. Dim I As Integer = 0
    6. If StatusBar IsNot Nothing Then
    7. StatusBar.Maximum = UIDs.Count
    8. StatusBar.Value = 0
    9. ElseIf ToolStripProgressBar IsNot Nothing Then
    10. ToolStripProgressBar.Maximum = UIDs.Count
    11. ToolStripProgressBar.Value = 0
    12. End If
    13. For Each ResultUID In UIDs
    14. Dim MAXAzAcGUID = Aggregate Result In db.PAAzAc Where Result.Rohdaten.PAInternUID = ResultUID Into Max(Result.AzAcGUID)
    15. Dim Firma = From Result In db.PAAzAc _
    16. Where Result.AzAcGUID = MAXAzAcGUID _
    17. Select Result.AzAcFirm
    18. For Each Result In Firma
    19. Var = Result
    20. Next
    21. If TreeView.Nodes(0).Nodes.Count > 0 Then
    22. For Each Node In TreeView.Nodes(0).Nodes
    23. If Var = Node.text Then
    24. Merker = True
    25. End If
    26. Next
    27. If Merker = False Then
    28. TreeView.Nodes(0).Nodes.Add(Var)
    29. TreeView.Nodes(0).LastNode.Name = Var
    30. Else
    31. Merker = False
    32. End If
    33. Else
    34. TreeView.Nodes(0).Nodes.Add(Var)
    35. TreeView.Nodes(0).LastNode.Name = Var
    36. End If
    37. For Each Node In TreeView.Nodes(0).Nodes
    38. If Var = Node.text Then
    39. Dim Mitarbeiter = From Result In db.Rohdaten
    40. Where Result.PAInternUID = ResultUID
    41. Select Result.PANam & ", " & Result.PAVNam
    42. For Each MA In Mitarbeiter
    43. TreeView.Nodes(0).Nodes(I).Nodes.Add(MA)
    44. TreeView.Nodes(0).Nodes(I).LastNode.Name = ResultUID
    45. If IsMitarbeiterAktiv(ResultUID) = True Then
    46. TreeView.Nodes(0).Nodes(I).LastNode.ForeColor = Color.Green
    47. ElseIf IsMitarbeiterAktiv(ResultUID) = False Then
    48. TreeView.Nodes(0).Nodes(I).LastNode.ForeColor = Color.Red
    49. End If
    50. Next
    51. I = 0
    52. Exit For
    53. End If
    54. I = I + 1
    55. Next
    56. If StatusBar IsNot Nothing Then
    57. StatusBar.Value = StatusBar.Value + 1
    58. ElseIf ToolStripProgressBar IsNot Nothing Then
    59. ToolStripProgressBar.Value = ToolStripProgressBar.Value + 1
    60. End If
    61. Next
    62. 'TreeView.Nodes(0).TreeView.Sort()
    63. TreeView.Sort()
    64. Return True
    65. End Function


    Vielen Dank an alle im Voraus! :D

    Gruß,
    Hendrik
    Der Vorteil der Intelligenz besteht darin, sich dumm stellen zu können. Das Gegenteil davon ist schon schwieriger.
    Hi,

    wurde gelöst!

    Option Strict on - Hats behoben... Danke!

    Wen es interessiert - Es lag daran, das ein Integer als String gebunden wurde. Option Strict on hats richtig gestellt und schon liefs ;)

    Gruß,
    Hendrik
    Der Vorteil der Intelligenz besteht darin, sich dumm stellen zu können. Das Gegenteil davon ist schon schwieriger.