Laden...

Spalte einer Listview nach Zahlen sortieren, die als String vorliegen

Erstellt von gelöschtem Konto vor 13 Jahren Letzter Beitrag vor 13 Jahren 8.822 Views
Hinweis von winSharp93 vor 13 Jahren

Column != Kolumne. Ich habe das mal in "Spalte" geändert und hoffe, das passt so 😉

Gelöschter Account
vor 13 Jahren
Spalte einer Listview nach Zahlen sortieren, die als String vorliegen

Hi@all
Ich habe hier eine Listview, in der eine Column ausschliesslich aus zahlen besteht. Ich verwende eine Sortierfunktion, die mit SortDescription arbeitet. Strings sortieren klappt prima, aber Zahlen (die als Strings vorliegen), werden natürlich falsch geordnet, z.B.:

10009
23
3
40004

Wie kann ich das umbiegen, dass Zahlen richtig sortiert werden? Ist das mit SortDescription überhaupt möglich?

1.552 Beiträge seit 2010
vor 13 Jahren

Hallo gijoe222,

sorge dafür dass der Spalte nur Zahlen hinzugefügt werden, dann hast du kein Problem damit.
Ansonsten siehe: Strings sortieren, aber etwas speziell... [==> natsort]

Gruß
Michael

Mein Blog
Meine WPF-Druckbibliothek: auf Wordpress, myCSharp

Gelöschter Account
vor 13 Jahren

Hi, der Spalte werden nur Zahlen hinzugefügt, aber sie werden nicht sortiert. Oder meinst du anstatt string nur int? Kann ich string-zahlen nicht sortieren?

1.044 Beiträge seit 2008
vor 13 Jahren

Hallo gijoe222,

du hast xxMUROxx falsch verstanden. Es geht daraum, dass standardmäßg anders sortiert wird. Das möchtest du ja nicht. xxMUROxx hat dich auf einen Link verwiesen. Dort findest du weitere Informationen.

Du kannst sortieren, wie du möchtest. Es bleibt dir überlassen, wie du es programmierst.

zero_x

Gelöschter Account
vor 13 Jahren

Also sortiert man übrlicherweise gar nicht erst über SortDescription sondern bastelt sich was eigenes mit einem Natural-Sort?

3.825 Beiträge seit 2006
vor 13 Jahren

Hallo gijoe222,

Du kannst auch die Zahlen einfach rechtsbündig ausrichten und mit Leerzeichen auffüllen, dann werden sie automatisch richtig sortiert :

lvi.SubItem.Add(zahl.PadRight(10));

(so ungefähr, ohne Gewähr)

Grüße Bernd

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3

Gelöschter Account
vor 13 Jahren

Hm, geile Idee! Allerdings schaffe ich dann das Problem nicht ganz aus der Welt:
test_1
test_33
test_9

Klar, bei nur Zahlen gehts, stimmt, aber ich möchte eigentlich alle (potentiellen) Probleme aus der Welt schaffen.

1.552 Beiträge seit 2010
vor 13 Jahren

Wobei du dann wieder beim Problem bist weilches mit Natürliche Sortierung gelöst werden kann.

Mein Blog
Meine WPF-Druckbibliothek: auf Wordpress, myCSharp

Gelöschter Account
vor 13 Jahren

Werde wohl nicht drum-herum kommen. Ich hoffte, die bereits verwendete Suche nicht über den haufen werfen zu müssen:) Trotzdem versteh ich nicht ganz, warum ich für so etwas dutzende von Code-Zeilen schreiben muss und dies nicht längst Bestandteil von C# selber ist (à la ICollectionView.sort)

Gelöschter Account
vor 13 Jahren

lol Danke@admin (für das Ändern von "Kolumne")!

Gelöschter Account
vor 13 Jahren

Den Link, der da oben steht, handelt aber nicht von wpf-Listviews!
Den Vergleich der Strings sollte keine Probleme bereiten, eher der Sortier-Algorithmus selber. Welchen nehm ich da? Oder gibts schon fertige? Muss man da wirklich das Rad neu erfinden? Denn dann würde ich die Listen-Elemente in einen Array knallen und mit einem Effizienten Algorithmus sortieren. Aber ich denke da bin ich auf dem Holzweg...

1.552 Beiträge seit 2010
vor 13 Jahren

Den Vergleich der Strings sollte keine Probleme bereiten, eher der Sortier-Algorithmus selber. Welchen nehm ich da? Oder gibts schon fertige? Muss man da wirklich das Rad neu erfinden?

Wieso neu erfinden? Unter meinem Link sind genug Codes drinnen die du werwenden kannst.

Den Link, der da oben steht, handelt aber nicht von wpf-Listviews!

Um was es sich handelt ist in diesem Moment egal, das Problem liegt ja nicht dort sondern an der Sortierung

Mein Blog
Meine WPF-Druckbibliothek: auf Wordpress, myCSharp

Gelöschter Account
vor 13 Jahren

Ok, also nehmen wir mal an, ich hätte die Klasse IComparable soweit angepasst, dass sie meinen Bedürfnissen entspricht, adde ich sie nun als Sortdescription meiner ICollectionView?

Gelöschter Account
vor 13 Jahren

Verdammtnochmal, ist denn das wirklich soo schwierig? Keine der Lösungen ist auch nur annähernd zufriedenstellend. Hat man den Natural Sort implementiert, klappt es mit den Datum's nicht. Gibts da tatsächlich noch keine "Standardlösungen von sortieren von Listen in WPF? So ein Bullshit!

Jaha, und dein gepostetes Link benötigt für das sortieren von 1000 Einträgen ca. 5 Sekunden, das ist ja wohl ein Witz!

1.552 Beiträge seit 2010
vor 13 Jahren

Strings wenden nach der Mächtigkeit des chars an der jeweiligen Positionen sortiert. Bei int ist es eben die Zahl und beim Datum die InternalTicks. So ist das eben mal. Alles andere ausergewöhnliche muss man eben selbst implementieren. Es darf doch nicht so schwer sein eine normale String Liste mit dem NaturalSort zu sortieren.
(

Verdammtnochmal, ist denn das wirklich soo schwierig? Bitte immer sachlich bleibenn){gray}

Mein Blog
Meine WPF-Druckbibliothek: auf Wordpress, myCSharp

Gelöschter Account
vor 13 Jahren

Aber der naturalsort dauert bei meiner liste eeewig.

1.552 Beiträge seit 2010
vor 13 Jahren

Dann stellt sich wiederum die Frage wie lang die Liste ist. Grundsätzlich sollten nur jene Daten geladen werden welche wirklich nötig sind. Denn ich denke mir dass wenn die liste 100.000 Einträge hat ist er für den Benutzer nicht interessant alle geladen zu bekommen.
Stichwort: Lazy Loading

Gruß
Michael

Mein Blog
Meine WPF-Druckbibliothek: auf Wordpress, myCSharp