Zum Inhalt springen

C# DataGridView Spalte mit Einheit (z.B. Liter, Euro, ...) sortieren


Empfohlene Beiträge

Geschrieben

Hi,

ich habe eine Windows-Forms-Anwendung mit DataGridView. Hier wird zuerst eine DataTable erstellt und später ans DataGridView gebunden. Ich zeige in mehreren Spalten Werte inkl. Einheit dahinter an. z.B. 1,5 Liter. Als Typ für die Spalte habe ich string angegeben.

Habe jetzt folgende Werte in einer Spalte:

4 Liter

1 Liter

12 Liter

Wenn ich diese Spalte sortiere kommt folgendes dabei heraus:

1 Liter

12 Liter

4 Liter

Wenn ich die Liter weglasse und als Typ int angebe, dann sortiert er richtig. Aber es müssen ja die Liter dahinterstehen. Wie kann ich das machen?

Geschrieben
Wenn ich die Liter weglasse und als Typ int angebe, dann sortiert er richtig. Aber es müssen ja die Liter dahinterstehen. Wie kann ich das machen?

Indem Du zwischen "Anzeige" und "Daten" differenzierst und die Sortiererei auf den reinen Daten, also ohne Literangabe, vornimmst und dann die Anzeige (zu den jeweiligen Angaben "Liter" hinzufügst) aktualisierst. Beispielsweise könntest Du ein Modell schaffen, dessen "ToString()" Du überschreibst, so dass dann "Liter" hintangehängt wird. Und diesen String klebst Du in die Anzeige.

Geschrieben
@Klotzkopp Ich sehe dort keine Möglichkeit die Einheit (Liter oder Euro) anzugeben.
Die wirst du auch nicht finden. Es gibt nicht für jeden Spezialfall eine vorgefertigte Lösung.

Daher gibt es auch keine fertige Lösung für "Sortiere Strings mit Zahl am Anfang und Einheit am Ende".

Es gibt fertige Lösungen für den allgemeinen Fall. Das sieht so aus, dass du eine Funktion bereitstellst, die bei zwei Objekten entscheiden kann, ob das eine Objekt vor dem anderen stehen soll. Diese Vergleichsfunktion kannst du im SortCompare-Event unterbringen, oder über eine Klasse, die IComparer implementiert. Wie man das einbaut, siehst du auf der verlinkten Seite. Wie die Vergleichsfunktion in deinem Fall aussieht, hängt natürlich davon ab, wie deine Objekte aussehen, und wie du sie sortieren willst.

Geschrieben

Leider funktionieren die Beispiele nicht, da ich eine DataTable auf DataSource vom Grid schreibe. Habe das Problem jetzt anders gelöst. Im ColumnHeaderMouseClick Event rufe ich einfach nochmal die Funktion auf, die das Grid füllt und sortiere vorher meine Daten dementsprechend.

Einziger Nachteil, der mich auch stört ist, dass der Pfeil im ColumnHeader nicht mehr angezeigt wird.

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...