Kaktusfan1707 Geschrieben 25. Februar 2014 Geschrieben 25. Februar 2014 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?
Klotzkopp Geschrieben 25. Februar 2014 Geschrieben 25. Februar 2014 How to: Customize Sorting in the Windows Forms DataGridView Control
lilith2k3 Geschrieben 25. Februar 2014 Geschrieben 25. Februar 2014 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.
Kaktusfan1707 Geschrieben 26. Februar 2014 Autor Geschrieben 26. Februar 2014 @Klotzkopp Wo kann ich da die Einheit (z.B. Liter oder Euro) angeben? @lilith2k3 Kann ich dann die automatische Sortierung vom Grid nehmen, oder muss ich diese selbst schreiben?
Klotzkopp Geschrieben 26. Februar 2014 Geschrieben 26. Februar 2014 @Klotzkopp Wo kann ich da die Einheit (z.B. Liter oder Euro) angeben?Was ist "da"? Auf der Seite, die ich verlinkt habe, stehen drei Ansätze, wobei der erste nichts für dich ist. Welchen der anderen meinst du?
Kaktusfan1707 Geschrieben 28. Februar 2014 Autor Geschrieben 28. Februar 2014 @Klotzkopp Ich sehe dort keine Möglichkeit die Einheit (Liter oder Euro) anzugeben.
Klotzkopp Geschrieben 28. Februar 2014 Geschrieben 28. Februar 2014 @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.
lilith2k3 Geschrieben 28. Februar 2014 Geschrieben 28. Februar 2014 Gegen Langeweile: LINQ (Language-Integrated Query, sprachintegrierte Abfrage) LINQ-zu-Objekte Sortieren von Daten
Kaktusfan1707 Geschrieben 6. März 2014 Autor Geschrieben 6. März 2014 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.
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden