Sortier-Reihenfolge im DataGridView



  • Hallo,

    ich habe ein DataGridView, bei dem eine Sortierung abhängig von mehreren Spalten durchgeführt wird. Das funktioniert soweit schon. Wenn ich in die Kopfzeile von irgendeiner Spalte klicke, dann wird abwechselnd auf- oder absteigend sortiert. Das möchte ich aber so nicht haben. Es soll grundsätzlich immer aufsteigend sortiert werden. Kann man den automatischen Wechsel zwischen auf- und absteigender Sortierung irgendwie ausschalten?

    Gruß
    Michael



  • nein; das ist generell so programmiert worden, weil es am ehesten den praktischen bedürfnissen entspricht.



  • Ich gehe schon stark davon aus, dass man das verhinden kann. Schau dir die Doku an. Notfalls muss man halt paar Maus Events überladen.





  • How to Disable Sort in DataGridView

    Ganz ausschalten will ich die Sortierung nicht. Es soll nur immer in die gleiche Richtung sortiert werden, egal wie oft ich auf den Kopf der Spalte klicke.





  • How to: Customize Sorting in the Windows Forms DataGridView Control

    Auf der genannten Seite stehen drei Beispiele:
    Das erste Beispiel ist uninteressant, weil man damit immer nur nach einer Spalte sortieren kann.
    Das zweite Beispiel entspricht ziemlich genau meinem eigenen Code, als ich die Frage gestellt habe. Mit dem Problem, dass die Sortier-Richtung ständig wechselt.
    Das dritte Beispiel tut genau was ich brauche: Es sortiert nach mehreren Spalten und zwar immer in der gleichen Richtung. Allerdings wird der Sortiervorgang jetzt durch einen Button gestartet, und nicht mehr durch einen Klick in die Kopfzeile des DataGridView. Welches Ereignis wird denn ausgelöst wenn ich in die Kopfzeile klicke? Ich würde gerne noch abfragen in welche Spalte geklickt wurde, um abhängig davon unterschiedliche Sortiervorgänge durchzuführen.

    Michael



  • Eine Sekunde googeln: DataGridView.ColumnHeaderMouseClick?

    Weiß aber nicht, obs richtig ist, hab schon seit Jahren nicht mehr mit WinForms gearbeitet.



  • Es geht mit dataGridView1_CellClick. Danke für eure Hinweise, das Problem ist jetzt gelöst.

    Michael

    
            private class RowComparer : System.Collections.IComparer
            {
                private static int c = 0;
    
                public RowComparer(int column)
                {
                    c = column;
                }
    
                public int Compare(object x, object y)
                {
                    DataGridViewRow DataGridViewRow1 = (DataGridViewRow)x;
                    DataGridViewRow DataGridViewRow2 = (DataGridViewRow)y;
    
                    // Try to sort based on column 0
                    int CompareResult = -1 * System.String.Compare(
                        DataGridViewRow1.Cells[0].Value.ToString(),
                        DataGridViewRow2.Cells[0].Value.ToString());
    
                    // If the fields in column 0 are equal, sort based on columns 1 or 2
                    if (CompareResult == 0)
                    {
                        CompareResult = System.String.Compare(
                            DataGridViewRow1.Cells[c].Value.ToString(),
                            DataGridViewRow2.Cells[c].Value.ToString());
                    }
                    return CompareResult;
                }
            }
    
            private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
            {
                if((e.ColumnIndex >= 1) && (e.ColumnIndex <= 2))
                    dataGridView1.Sort(new RowComparer(e.ColumnIndex));
            }
    


  • @Mechanics sagte in Sortier-Reihenfolge im DataGridView:

    DataGridView.ColumnHeaderMouseClick

    Damit geht es sogar noch besser, nämlich nur wenn man in die Kopfzeile klickt.

    Michael


Log in to reply