AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Listview NICHT sortieren

Ein Thema von martinf16 · begonnen am 29. Aug 2009 · letzter Beitrag vom 31. Aug 2009
Antwort Antwort
martinf16

Registriert seit: 26. Aug 2007
99 Beiträge
 
Turbo Delphi für Win32
 
#1

Listview NICHT sortieren

  Alt 29. Aug 2009, 22:58
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!
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#2

Re: Listview NICHT sortieren

  Alt 29. Aug 2009, 23:04
Zitat von martinf16:
In einer Schleife durchlaufe ich die Einträge einer Listview um sie zu ändern.
Läuft die Schleife rückwärts (for i := listview.Items.count-1 downto 0 do)?
Das ist nötig, um beim Einfügen oder Löschen von Items die Numerierung nicht durcheinander zu bringen.
fork me on Github
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Listview NICHT sortieren

  Alt 29. Aug 2009, 23:49
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
martinf16

Registriert seit: 26. Aug 2007
99 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Listview NICHT sortieren

  Alt 29. Aug 2009, 23:57
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.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Listview NICHT sortieren

  Alt 30. Aug 2009, 02:37
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
martinf16

Registriert seit: 26. Aug 2007
99 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Listview NICHT sortieren

  Alt 30. Aug 2009, 04:05
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?
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Listview NICHT sortieren

  Alt 30. Aug 2009, 04:55
Die Dateien sind ja auch Daten oder nicht?

Kann jetzt auch sein, dass ich das mit einer Listbox verwechsele.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#8

Re: Listview NICHT sortieren

  Alt 30. Aug 2009, 09:57
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:
  ...
  ListView.Items.BeginUpdate;
  Try
    For i:=0 to ListView.Items.Count - 1 do
      RenameItem (ListView.Items[i]);
  Finally
    ListView.Items.EndUpdate;
  End;
  ...
Durch das 'BeginUpdate' wird nun sowohl die Darstellung als auch die instantane Sortierung blockiert, bis 'EndUpdate' aufgerufen wird.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
martinf16

Registriert seit: 26. Aug 2007
99 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: Listview NICHT sortieren

  Alt 31. Aug 2009, 05:17
Ohja, vielen Dank. Jetzt funktionierts.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:02 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz