Benutzer mit den meisten Antworten
Eigene Sortier-Methode liefert unterschiedliche Ergebnisse

Frage
-
Hallo zusammen,
Wie das Topic schon erwähnt habe ich Probleme mit meiner Sortier-Methode.
Bei ein und der selben Ausgangslage erhalte ich 2 unterschiedliche Ergebnisse. Habe alles kontrolliert, die einzelschritte funktionieren, nur im gesammten kommt mal etwas falsches, mal etwas richtiges raus. (Ergebnisse beim falschen varieren sind aber ähnlich).
Sortiert werden soll in etwa soetwas: 009/A.1/21, wobei letzteres immer eine Zahl is, nach der sortiert werden soll.
Hier geb ich auch mal den Code, hoffe ihr werdet daraus schlau. (Habe übrigens mit Absicht Iteration statt Rekursion gewählt)
private void Sort(int ColumnIndex, int WhatSplit, char Splitter) { int col = ColumnIndex; int row = 0; int rowc = dataGridView1.RowCount-1; int [] nr = new int[rowc]; for (int i = 0; i < rowc+1; i++) { row = rowc-1; //unterste Zeiel immer leer //abbrechen wenn in der zeile keien werte mehr drin stehen if (dataGridView1[col, row].Value == null || dataGridView1[col, row].Value.ToString() == " ") { break; } string s = dataGridView1[col, row].Value.ToString(); string [] split = s.Split(Splitter); int t = Convert.ToInt32(split[WhatSplit]); for (int i2 = 0; i2 < i; i2++) { if (nr[i2] != 0) { if (t < nr[i2]) { nr[i2 + 1] = nr[i2]; //wenn t(aktuelles element) größer ist als das zuvergleichende dann... nr[i2] = t; DataGridViewRow r = dataGridView1.Rows[row]; dataGridView1.Rows.RemoveAt(row); dataGridView1.Rows.Insert(i2, r); break; } } else //t sei das größte der neuen liste { nr[i2] = t; DataGridViewRow r = dataGridView1.Rows[row]; dataGridView1.Rows.RemoveAt(row); dataGridView1.Rows.Insert(i2, r); } } if (i == 0) { nr[0] = t; DataGridViewRow r = dataGridView1.Rows[row]; dataGridView1.Rows.RemoveAt(row); dataGridView1.Rows.Insert(0, r); } } }
Edit: Manchmal bleiben Verlgeiche hängen, z.B. macht er in der i2 Schleife 4-5mal den Verlgeich 100<92
mfgSimon
- Bearbeitet Adun.SG Donnerstag, 8. Dezember 2011 11:41 Information angefügt
Antworten
-
Hallo Simon,
das DataGridView hat dafür eine eigene Schnittstelle, siehe
Gewusst wie: Anpassen der Sortierung im DataGridView-Steuerelement in Windows FormsDie Rows selbst durch die Gegend schubsen sollte man niemals, da das DataGridView darauf ungehalten
reagieren könnte, wenn es von der Aktion nichts mitbekommt.Vergleiche sollte man wiederum über die IComparable Schnittstelle durchführen.
Ein generelles Beispiel (allerdings in VB) wie so ein Vergleich im allgemeinen aussehen könnte,
hatte ich mal gezeigt unter: Fehler bei "nervösem" Klicken.In Deinem Falle müsstest Du das gleiche für die gesplitteten Feldinhalte machen.
Gruß Elmar
- Als Antwort markiert Robert BreitenhoferModerator Mittwoch, 14. Dezember 2011 12:05
Alle Antworten
-
Hallo Simon,
das DataGridView hat dafür eine eigene Schnittstelle, siehe
Gewusst wie: Anpassen der Sortierung im DataGridView-Steuerelement in Windows FormsDie Rows selbst durch die Gegend schubsen sollte man niemals, da das DataGridView darauf ungehalten
reagieren könnte, wenn es von der Aktion nichts mitbekommt.Vergleiche sollte man wiederum über die IComparable Schnittstelle durchführen.
Ein generelles Beispiel (allerdings in VB) wie so ein Vergleich im allgemeinen aussehen könnte,
hatte ich mal gezeigt unter: Fehler bei "nervösem" Klicken.In Deinem Falle müsstest Du das gleiche für die gesplitteten Feldinhalte machen.
Gruß Elmar
- Als Antwort markiert Robert BreitenhoferModerator Mittwoch, 14. Dezember 2011 12:05