Benutzer mit den meisten Antworten
List mit ValueMember sortieren

Frage
-
Guten Morgen.
Irgendwie stehe ich gerade an. Folgender Code liefert eine Liste von Einträgen mit DisplayMember und ValueMember zurück, welche in der GUI in einer ComboBox angezeigt werden. Nun möchte ich diese Liste gern nach dem ValueMember bzw optional nach dem DisplayMember sortieren. Der Datentyp ergibt sich aber aus der jeweiligen DataColumn und ich weiß ihn vorher nicht. Wie stelle ich das am Besten an?
DataColumn colV = result.Columns[valueMember]; DataColumn colD = result.Columns[displayMember]; return (from DataRow row in result.Rows select new ListEntry { DisplayName = GetDisplayValue(colDisplay, valueType, metadata, row[colD]), ValueMember = row[colV] }).ToList();
Danke für Hinweise
Matthias
Antworten
-
Hallo Matthias,
das einfachste wäre in Deinem Falle, die Select-Methode zu nutzen,
und den Sort-Parameter mit valueMember bzw. displayMember zu versorgen.Entweder ergänzt Du zu result.Select("", valueMember)
oder vorher wenn result bereits auf einem Select basiert.Die komplexere Variante wäre, sich einen eigenen Comparer zu bauen,
was mir zwar als erstes in denn Sinn kam, aber doch einiges mehr an Aufwand bedeutet.Gruß Elmar
- Bearbeitet Elmar BoyeEditor Freitag, 2. Dezember 2011 10:42
- Als Antwort markiert Robert BreitenhoferModerator Freitag, 9. Dezember 2011 12:13
-
Hallo Matthias,
exemplarisch für eine Sortierung nach valueMember:
return (from DataRow row in result.Select("", valueMember) select new ListEntry { DisplayName = GetDisplayValue(colDisplay, valueType, metadata, row[colD]), ValueMember = row[colV] }) .ToList();
Gruß Elmar
- Als Antwort markiert Robert BreitenhoferModerator Freitag, 9. Dezember 2011 12:13
Alle Antworten
-
Hallo Matthias,
das einfachste wäre in Deinem Falle, die Select-Methode zu nutzen,
und den Sort-Parameter mit valueMember bzw. displayMember zu versorgen.Entweder ergänzt Du zu result.Select("", valueMember)
oder vorher wenn result bereits auf einem Select basiert.Die komplexere Variante wäre, sich einen eigenen Comparer zu bauen,
was mir zwar als erstes in denn Sinn kam, aber doch einiges mehr an Aufwand bedeutet.Gruß Elmar
- Bearbeitet Elmar BoyeEditor Freitag, 2. Dezember 2011 10:42
- Als Antwort markiert Robert BreitenhoferModerator Freitag, 9. Dezember 2011 12:13
-
Hallo Matthias,
exemplarisch für eine Sortierung nach valueMember:
return (from DataRow row in result.Select("", valueMember) select new ListEntry { DisplayName = GetDisplayValue(colDisplay, valueType, metadata, row[colD]), ValueMember = row[colV] }) .ToList();
Gruß Elmar
- Als Antwort markiert Robert BreitenhoferModerator Freitag, 9. Dezember 2011 12:13
-
Hallo Matthias,
Du kannst bei Select direkt absteigend sortieren, in dem Du DESC angibst,
ASC sortiert aufsteigend, ist aber optional, da Standard.Und dürfte etwas effizienter sein.
Auch kannst Du mehrere Spalten als kommaseparierte Liste angeben.
Sollten die Spaltennamen Leerzeichen oder Sonderzeichen enthalten,
setze sie in eckige Klammern.Ein Beispiel: "[Spalte 1] ASC, [Spalte 2] DESC"
Gruß Elmar
-
Hallo Matthias,
das hängt hier nicht einer GUI, eine kleine Methode würde reichen ala:
public static string BuildSortCriteria(string columnName, bool descending) { if (String.IsNullOrEmpty(columnName)) return String.Empty; string sort = "[" + columnName + "]" + ((descending) ? " DESC" : " ASC"); return sort; }
Gruß Elmar