Self Sorting Listbox

9

Völlig ramponiert von etwas, das einfach zu sein scheint und zu Tode getan wurde ... Trotzdem immer noch ratlos.

Was ich machen möchte: Ich habe eine WinForms ListBox. Seine Elemente sind mit Objekten gefüllt, das DisplayMember ist gesetzt. Wenn die App ausgeführt wird, ändern sich möglicherweise die Daten in den aufgelisteten Elementen, einschließlich des Felds hinter dem DisplayMember. Ich möchte, dass der in der ListBox angezeigte Text sich ändert, wenn dies geschieht, und ich möchte auch, dass die ListBox sich selbst neu sortiert, so dass die Elemente in alphabetischer Reihenfolge bleiben.

Eine BindingList funktioniert gut, um den angezeigten Text zu aktualisieren, wenn sich die Daten ändern, aber für mein Leben kann ich es nicht sortieren.

Ich habe dies überprüft: Ссылка

Ergänzen Sie hier zahlreiche Threads, wie das geht, aber nichts davon scheint für eine ListBox zu funktionieren.

Das Festlegen der Sorted-Eigenschaft in der ListBox ist ebenfalls nicht hilfreich.

Was muss ich tun, damit eine ListBox sich selbst sortiert?

    
Jack 20.09.2010, 01:42
quelle

8 Antworten

1

Sie können ein BindingSource-Objekt verwenden. Ziehen Sie es einfach per Drag & Drop in Ihr Formular und verweisen Sie Ihre ListBox.DataSource-Eigenschaft auf dieses BindingSource-Objekt. Wechseln Sie dann zu den BindingSource-Eigenschaften und definieren Sie Sort nach Bedarf.

Dann können Sie im Code myBindingSource.DataSource = myCollection und voila setzen, Ihre Listbox wird ausgefüllt und sortiert. Einfach.

    
Alexey Raga 20.09.2010 10:59
quelle
1

Wie bei Patrol02s Post möchten Sie jedoch versuchen, die DataSource auf null zu setzen und sie dann basierend auf einem Ereignis, das durch die Änderung der Listengröße ausgelöst wurde, neu zuzuweisen. Sie könnten das Beobachtermuster für die Sammlung verwenden und die Methoden Hinzufügen und Entfernen überschreiben, um Beobachter anzuweisen, sich erneut zu binden.

    
Antony Koch 21.09.2010 11:26
quelle
1

Durch das Zurücksetzen der DataSource wird die ListBox effektiv sortiert:

%Vor%

Aber das ist nicht automatisch. Wie ich es verstehe, sollte das Sortieren immer dann erfolgen, wenn das Feld hinter dem DisplayMember aktualisiert wird, durch ein Ereignis oder etwas ähnliches ...

Siehe meinen kompletten Test trotzdem:

%Vor%     
Gabriel 24.09.2010 19:42
quelle
1

Der LVS_SORT-Stil im Listensteuerelement sollte funktionieren, Sie sagen jedoch, dass dies nicht der Fall ist. Ich würde überprüfen, ob es angewendet wird. Ich hatte nie Probleme mit einem selbstsortierenden Dropdown-Listen-Steuerelement. Beachten Sie, dass dies ein Listensteuerelement ist, von dem wir sprechen, kein ListView-Steuerelement.

    
dyasta 26.09.2010 16:45
quelle
1

Ich habe dies getan, indem ich eine neue Klasse, BindingSortingList, erstellt habe, die von BindingList geerbt wurde. Darin überschrieb ich alle notwendigen Methoden wie ApplySortCore () und RemoveSortCore (). Wenn Sie die Sortierung anwenden, müssen Sie sie intern in eine Standardliste kopieren, die sortierbar ist, sie sortieren und dann wieder in die Liste "this" kopieren. Es scheint verrückt, aber jetzt habe ich eine wiederverwendbare Klasse für diesen Zweck.

    
Mike K 04.05.2011 19:50
quelle
0
%Vor%

Was ist damit?

    
Thorin Oakenshield 20.09.2010 03:50
quelle
-2
%Vor%     
steve 04.10.2011 06:12
quelle
-4
%Vor%     
steve 04.10.2011 06:27
quelle