Laden...

Sortierung der ListView Items

Erstellt von -acid- vor 19 Jahren Letzter Beitrag vor 19 Jahren 4.460 Views
-
-acid- Themenstarter:in
885 Beiträge seit 2004
vor 19 Jahren
Sortierung der ListView Items

Hi,

ich habe ne Dateiliste von 1.jpg - 20.jpg und lade diese in eine ListView. Allerdings wird da angezeigt:

1.jpg
10.jpg
11.jpg
...

Der Windows-Explorer zeigt die aber korrekt sortiert an.

1.jpg
2.jpg
3.jpg
...

Wie kann ich das sortieren wie im Explorer?

49.485 Beiträge seit 2005
vor 19 Jahren

Hallo -acid-,

darüber, welche der Sortierungen korrekt ist, lässt sich trefflich streiten. Aber die Sortierung des ListViews kannst du mit ListView.ListViewItemSorter beeinflussen.

HTH

herbivore

-
-acid- Themenstarter:in
885 Beiträge seit 2004
vor 19 Jahren

ja darüber läßt sich streiten g
aber ich finde sie so besser.

ja soweit war ich schon, nur hat msdn das im beispiel so komisch erklärt, das ich nicht wüsste wie ich das auf meine bedürfnisse anpasse.

// ColumnClick event handler.
      private void ColumnClick(object o, ColumnClickEventArgs e){
           // Set the ListViewItemSorter property to a new ListViewItemComparer object.
         this.listView1.ListViewItemSorter = new ListViewItemComparer(e.Column);
           // Call the sort method to manually sort the column based on the ListViewItemComparer implementation.
         listView1.Sort();
      }

49.485 Beiträge seit 2005
vor 19 Jahren

Hallo -acid-,

in dem Beispiel ist die folgende Klasse entscheiden, die du selbst implementieren musst (da es so wie ich das sehe dafür keinen Standard-Sortierter gibt):


// Implements the manual sorting of items by columns.
class ListViewItemComparer : IComparer {
   private int col;
   public ListViewItemComparer() {
      col=0;
   }
   public ListViewItemComparer(int column) {
      col=column;
   }
   public int Compare(object x, object y) {
      // hier muss stattdessen deine Sortierung rein:
      return String.Compare(((ListViewItem)x).SubItems[col].Text,
                            ((ListViewItem)y).SubItems[col].Text);
   }
}

Das einzige, was du da noch ändern musst, ist statt String.Compare deinen Vergleich, bei dem 1.jpg vor 10.jpg kommt, auszuimplementieren.

HTH

herbivore

B
189 Beiträge seit 2004
vor 19 Jahren

Das was der Explorer von WinXP mach nennt sich "natural sort order", also natürliche Sortierung. Unter diesem Stichwort solltest du in Google fertige Algorithmen finden, die du ggf. nur noch nach C# portieren brauchst.

-
-acid- Themenstarter:in
885 Beiträge seit 2004
vor 19 Jahren

natural sort order... jo das wars, guter einfall. habe aber keinen algorithmus gefunden der mir bei der sortierung hilft.

(anscheinend können andre google besser als ich verwenden g)

-
-acid- Themenstarter:in
885 Beiträge seit 2004
vor 19 Jahren

hier hab ich evtl. noch was interessantes:

(ansonsten finde ich immer nur die php natsort function)

B
189 Beiträge seit 2004
vor 19 Jahren

Original von -acid-
hier hab ich evtl. noch was interessantes:

Der Source kommt mir bekannt vor, IIRC habe ich den schonmal gesehen. Ich wollte das auch mal nach C# portieren, bin dazu aber leider bisher nicht gekommen... 😦

(ansonsten finde ich immer nur die php natsort function)

Dann gibt bei Google einfach mal "-php" mit an, dann lässt er das weg. 😉

-
-acid- Themenstarter:in
885 Beiträge seit 2004
vor 19 Jahren

hab ich auch schon. bringt mich aber nicht weiter....

Hinweis von herbivore vor 13 Jahren

Siehe Natürliche Sortierung implementieren ("img2.jpg" vor "img10.jpg")