![]() |
Listview NICHT sortieren
Hallo,
ich habe schon versucht danach auf zu suchen, aber ich bekomme immer nur den Code zum sortieren einer ListView. Dabei suche ich genau das Gegenteil: Die ListView soll nicht sortiert werden! Das Problem: In einer Schleife durchlaufe ich die Einträge einer Listview um sie zu ändern. Jetzt werden die Einträge aber so schnell aktualisiert, dass sich die Positionen der Einträge verändern und dadurch alles durcheinander gerät. Gibt es daher eine Möglichkeit die Sortierung abzuschalten (dann ändere ich die Einträge) und danach schalte ich die Sortierung wieder ein? Vielen Dank! |
Re: Listview NICHT sortieren
Zitat:
Das ist nötig, um beim Einfügen oder Löschen von Items die Numerierung nicht durcheinander zu bringen. |
Re: Listview NICHT sortieren
Dann sorge dafür, dass während des Änderns keine keien Einträge hinzukommen. Oder trenne Datenhaltung und Darstellung und führe die Änderungen in deiner Datenhaltung durch.
|
Re: Listview NICHT sortieren
Es kommen keine neuen Einträge hinzu und das mit dem Rückwärts-Laufen-Lassen geht auch nicht.
Mal ein kleines Beispiel: In der Liste steht: A1 A2 A3 Bei den Einträgen wird "A" durch "B" ersetzt: Für den Fall dass, die Schleife von oben nach unten läuft: A1 wird zu B1, B1 rutscht nach unten A2 A3 Neue Sortierung: A2 A3 B1 Als nächstes wird A2 in B2 geändert, das geht auch noch gut. Wenn die Schleife aber B1 erreicht bleibt A3 übrig und wird nicht geändert und B1 sollte ja schon geändert werden. Beim Rückwärts-Durchlaufen würde die Sortierung bei diesem Beispiel gehen, nicht aber wenn man beispielsweise die Einträge B1, B2, B3 in A1, A2 und A3 umbenennen will. Das mit der gesonderten Liste erscheint mir zu umständlich für den besagten Fall. Es sollen ja nur einige Einträge umbenannt werden, deren alphabetische Reihenfolge sich leider ändern kann. Es wäre schön die Sortierung solange umbenannt wird einfach abzuschalten. So ähnlich wie in einer Stringlist mit sorted = false, wenn das auch in der Listview geht. |
Re: Listview NICHT sortieren
Also der Listview hat keine automatische Sortierung. Man muss explizit Sorted auf True setzen, damit die Einträge sortiert werden. Und eine Datenhaltung nicht im Listview ist eigentlich die übliche Vorgehensweise. Steuerelemente sind eigentlich nur dazu da die Daten darzustellen. Stichwort; Trennung von Daten und Sicht. willst du jetzt den Listview gegen ein anderes Steuerelement austauschen, bekommst du ziemliche Probleme. Desweiteren leidet auch die Wiederverwendbarkeit von Code.
|
Re: Listview NICHT sortieren
Naja, wenn es wirklich nicht anders geht, trenne ich die Daten von der Sicht.
Allerdings geht es in meinem Fall wirklich nur um die Anzeige von einigen Dateien, diese sollen wenn sie umbenannt wurden aktualisiert in der ListView dargestellt werden. Ich arbeite ja nicht mit den Daten in der ListView, sie sollen lediglich aktualisiert werden. Aber wie stellt man denn das sorted auf true bzw false? Die Eigenschaft sorted gibts offenbar bei der ListView gar nicht. Also ListView.Sorted := true. Wo stellt man sie denn ein? |
Re: Listview NICHT sortieren
Die Dateien sind ja auch Daten oder nicht?
Kann jetzt auch sein, dass ich das mit einer Listbox verwechsele. |
Re: Listview NICHT sortieren
Die Sortierreihenfolge einer ListView wird durch die Eigenschaft 'SortType' definiert. Der von Dir beobachtete Effekt tritt dann ein, wenn SortType einen anderen Wert als 'stNone' hat. Ohne weiteres Zutun ist das ListView bestrebt, jede Änderung an den Items sofort sortiert darzustellen. Als Abhilfe umklammere deine Umbenennungsoperationen mit einem ListView.Items.BeginUpdate / EndUpdate, so etwa:
Delphi-Quellcode:
Durch das 'BeginUpdate' wird nun sowohl die Darstellung als auch die instantane Sortierung blockiert, bis 'EndUpdate' aufgerufen wird.
...
ListView.Items.BeginUpdate; Try For i:=0 to ListView.Items.Count - 1 do RenameItem (ListView.Items[i]); Finally ListView.Items.EndUpdate; End; ... |
Re: Listview NICHT sortieren
Ohja, vielen Dank. Jetzt funktionierts.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:05 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz