Warum funktioniert die Änderung der Reihenfolge in einem ListView nach dem Sortieren in VB.NET 2003 nicht mehr?

Antwort vom

In VB.NET 2003 (also .NET Framework 1.1) gibt es beim `ListView`-Steuerelement einige Einschränkungen im Vergleich zu späteren Versionen. Das Problem, dass nach dem Sortieren die Änderung der Reihenfolge (z.B. per Drag & Drop oder durch manuelles Verschieben der Items) nicht mehr funktioniert, ist bekannt und hängt mit der Art und Weise zusammen, wie das `ListView`-Control intern arbeitet. **Hintergrund:** - Wenn du das `ListView` sortierst (z.B. durch Setzen der `ListViewItemSorter`-Eigenschaft oder durch Klicken auf eine Spaltenüberschrift), wird die Reihenfolge der Items durch den Sortieralgorithmus bestimmt. - Nach dem Sortieren kannst du die Reihenfolge der Items nicht mehr einfach durch Verschieben im Code ändern, weil der Sorter die Reihenfolge immer wieder überschreibt. **Lösungsvorschläge:** 1. **Sortierung deaktivieren:** Wenn du die Reihenfolge manuell ändern möchtest, musst du die Sortierung deaktivieren, indem du `ListViewItemSorter = Nothing` setzt. Danach kannst du die Items verschieben. ```vb.net ListView1.ListViewItemSorter = Nothing ' Jetzt Items verschieben ``` 2. **Sortierung nach Verschieben neu anwenden:** Wenn du nach dem Verschieben wieder sortieren möchtest, setze den Sorter erneut: ```vb.net ' Nach dem Verschieben ListView1.ListViewItemSorter = MeinComparer ListView1.Sort() ``` 3. **Eigene Verwaltung der Reihenfolge:** Wenn du eine benutzerdefinierte Reihenfolge benötigst (z.B. per Drag & Drop), solltest du die Sortierung komplett deaktivieren und die Reihenfolge der Items selbst verwalten. 4. **ListView neu befüllen:** Manchmal hilft es, die Items in eine temporäre Liste zu kopieren, das ListView zu leeren und dann die Items in der gewünschten Reihenfolge wieder hinzuzufügen. **Wichtiger Hinweis:** Das Verhalten ist in neueren .NET-Versionen ähnlich, aber dort gibt es mehr Möglichkeiten, z.B. mit DataBinding oder eigenen Sortiermechanismen. **Zusammenfassung:** Nach dem Sortieren mit einem `ListViewItemSorter` kannst du die Reihenfolge der Items nicht mehr direkt ändern, weil der Sorter die Reihenfolge bestimmt. Deaktiviere die Sortierung, ändere die Reihenfolge, und aktiviere sie ggf. wieder. Weitere Infos findest du z.B. in der [Microsoft-Dokumentation zum ListView.Sort-Methode](https://learn.microsoft.com/de-de/dotnet/api/system.windows.forms.listview.sort?view=netframework-1.1).

Neue Frage stellen

Verwandte Fragen

Kann das ListView in VB.NET 2003 einzelne Spalten sortieren?

Das ListView-Steuerelement in VB.NET 2003 unterstützt von Haus aus keine automatische Spaltensortierung, wie man es etwa von DataGridView kennt. Allerdings kannst du das Sortieren einzelner Spalt...

Wie löscht man in VB.NET 2003 eine Spalte aus einem ListView?

In VB.NET 2003 kannst du eine Spalte (Column) aus einem ListView entfernen, indem du sie aus der `Columns`-Sammlung des ListView löschst. Das geht zum Beispiel so: ```vb.net ' Angenommen, d...

Kann in VB.NET 2003 die erste Spalte eines ListViews auch mit SubItems(0) adressiert werden?

In VB.NET 2003 (also .NET Framework 1.1) kann die erste Spalte eines ListView-Elements **nicht** über `SubItems(0)` adressiert werden. Die erste Spalte (also der Haupttext eines ListViewItems) wi...

Kann man in VB.NET 2003 mehrere Spalten einer ListView nacheinander sortieren und dabei die Sortierung der vorangegangenen Spalten beibehalten?

In VB.NET 2003 ist die ListView-Komponente standardmäßig nur für die Sortierung nach einer einzelnen Spalte ausgelegt. Eine mehrstufige (also z.B. erst nach Spalte 1, dann nach Spalte...

Wie kann ich in VB.NET 2003 eine ListView per OpenFileDialog (Multiselect = true) mit Name und Fullname ausgewählter Dateien füllen?

Um in VB.NET 2003 eine `ListView` mit dem Namen und dem vollständigen Pfad (FullName) der über einen `OpenFileDialog` (mit `Multiselect = True`) ausgewählten Dateien zu füllen, kan...

Wie zeigt man in VB.NET 2003 in einer ListView die Icons versteckter Dateien halbtransparent an?

Um in VB.NET 2003 in einer `ListView` die Icons versteckter Dateien halbtransparent (wie im Windows Explorer) darzustellen, sind mehrere Schritte nötig, da die Standard-ListView-Steuerung dies ni...

Wie sortiert man in VB.NET 2003 Datums- oder Größendaten in einem ListView?

Um in VB.NET 2003 die Einträge eines `ListView` nach Datum oder Größe zu sortieren, musst du einen benutzerdefinierten Sortierer implementieren, da die Standard-Sortierung nur nach Tex...

Wie kann ich mit VB.NET 2003 eine Liste aller Sektionen aus einer INI-Datei auslesen?

Um mit VB.NET 2003 eine Liste aller Sektionen (Sections) einer INI-Datei zu erhalten, kannst du die Windows-API-Funktion `GetPrivateProfileSectionNames` verwenden. Diese Funktion liest alle Sektionsna...

Wie erhalte ich in VB.NET 2003 eine Rückmeldung, wenn das Verschieben einer Datei in den Papierkorb abgebrochen wird?

In VB.NET 2003 gibt es keine eingebaute, direkte Möglichkeit, den Abbruch (z.B. durch den Benutzer) beim Verschieben einer Datei in den Papierkorb zu erkennen, da die Standardmethoden wie `File.D...

Wie kann ich in VB.NET 2003 den Papierkorb verwenden?

In VB.NET 2003 gibt es keine eingebaute .NET-Klassenbibliothek, um Dateien direkt in den Windows-Papierkorb zu verschieben. Du kannst jedoch die Windows-API-Funktion **SHFileOperation** aus der Shell3...