none
Powershell GUI: Sortierung ListViewItem Collection RRS feed

  • Frage

  • Hallo,

    ich versuche eine besondere Sortierung einer ListViewItem-Collection durchzuführen.

    Die Daten kommen aus dem Active Directory des Kunden. Es gibt ein benutzerdefiniertes Attribut namens SortSequenceNumber, dass leer sein kann oder Zahlenwerte von 0 bis 999 enthält. Die Zahlenwerte sind nicht einmalig und können mehrfach vorkommen.

    Ich versuche nun eine Sortierung in dem Listview-Steuerelement ähnlich wie hier zu erreichen:

    Alle Objekte mit SortSequenceNumber 0 sollen ans Ende, alle Objekte ohne SortSequenceNumber davor, alle Objekte mit SortSequenceNumber 1 bis x sollen von oben beginnen.

    Derzeit hole ich mir alle Objekte einer Organisationseinheit vom Typ Kontakt oder Benutzer und fülle damit das ListView-Steuerlement. Dann baue ich die Liste neu auf, indem ich die Objekte anhand der Zahlenwerte auf ihrer jeweiligen Indexposition einfüge. Mein Hauptproblem sind jetzt "Lücken" in der Zahlenfolge, bei der die alphabetischen Objekte an der falschen Stelle stehen. (Im Beispiel die Nummer 9) Die Standartsortierung des Objekts ist nicht ausreichend, weil die Sortierung nicht 1,2,3,... ist sondern 1,10,11,...,2,20,21...

    Wie kann ich nun die Anforderung zur Sortierung umsetzen? Wäre der Ansatz vielleicht 3 Arrays zu erzeugen, alle Objekte die keine SortSequenceNumber haben in das erste, alle Objekte mit 0 in das zweite und alle Objekte mit einer SortSequenceNumber -gt 0 in das dritte Array stecken, diese dann durch einen Quick- oder Bubblesort zu jagen und die ListViewItem-Collection mit den drei Arrays neu aufbauen/befüllen?

    VG

    Sascha

    Montag, 5. Februar 2018 17:27

Alle Antworten

  • Fülle die Listview ganz normal mit den Werten und vergebe für die leeren und 0-Werte die Nummer 999999.
    Da die Listview allerdings nur Zeichenspalten enthält solltest du stattdessen ein DataGrid verwenden, dass dann nach Spalten sortieren kann.
    Montag, 5. Februar 2018 17:43
  • Hallo bfuerchau,

    danke für den Ansatz. Leider dürfen die Werte "leer" und 0 nicht verändert werden, ich muss die nach der Sortierung über GUI für die Weiterverarbeitung zurück ins AD schreiben. Weiterhin löst dieser Ansatz nicht die unerwünschte Sortierung nach 1,10,11,...,2,20,21... - auch wenn es sich dabei nur um 

    Ein Gridview hatte ich zuerst, aber hatte Probleme eine Sortierung einzelner Elemente über Up/Down Buttons zu realisieren, da es sich um ein Databound Item handelte. Eine Sortierung nach x-beliebigen Spalten ist nicht erforderlich, nur die 1. Spalte ist maßgebend. In Bezug  auf die Notwendigkeit die Werte beizubehalten, wird sich das Problem mit einem anderen Steuerelement glaub ich nicht lösen...

    Dienstag, 6. Februar 2018 15:20
  • Die Sortierung im Gridview geht nach Feldtyp. Du musst also den Typ als numerisch (int) definieren bzw. bereitstellen.
    Dann klappt auch die Sortierung, 1, 2, 3, ... 9, 10, 11, ....

    Ein GridView kann auch versteckte Spalten enthalten und für die Sortierung nimmt man ja Spalten.
    Somit kann man die manuelle Sortierung im Grid verbieten und sortiert nach der versteckten Spalte.

    Beim Bereitstellen der Daten im Grid veränderst du ja nicht die Originaldaten sondern erfindest ganz einfach den Sortierwert.

    Ansonsten würde ich dir mal VisualStudio Express empfehlen, denn da hast du erheblich simplere Möglichkeiten für grafische Oberflächen.

    Mittwoch, 7. Februar 2018 08:44