none
Eigene Sortier-Methode liefert unterschiedliche Ergebnisse RRS feed

  • 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


    mfg

    Simon


    • Bearbeitet Adun.SG Donnerstag, 8. Dezember 2011 11:41 Information angefügt
    Donnerstag, 8. Dezember 2011 11:38

Antworten

Alle Antworten

  • Hallo Simon,

    das DataGridView hat dafür eine eigene Schnittstelle, siehe
    Gewusst wie: Anpassen der Sortierung im DataGridView-Steuerelement in Windows Forms

    Die 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

    Donnerstag, 8. Dezember 2011 13:15
    Beantworter
  • Hallo Adun.SG,

    Ich gehe davon aus, dass die Antwort Dir weitergeholfen hat.
    Solltest Du noch "Rückfragen" dazu haben, so gib uns bitte Bescheid.

    Grüße,
    Robert

    Mittwoch, 14. Dezember 2011 12:05
    Moderator