Entwickler-Ecke

WinForms - Spaltensortierung im DataGridView


yndaso - Do 19.05.11 10:27
Titel: Spaltensortierung im DataGridView
Hallo zusammen,
ich möchte/muss in einem DataGridView nach mehreren Spalten sortieren.

Mein DataGridView besteht aus mehrern spalten (Source/Name/Idn/Text/...)

Nun soll nach dem Füllen des grids zweistufig, erst nach source dann nach idn geordnet werden.

Habe in der msn dazu was gefunden, dass sich vielversprechend anhört:

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
   private void dataGridView1_SortCompare(object sender,
        DataGridViewSortCompareEventArgs e)
    {
        // Try to sort based on the cells in the current column.
        e.SortResult = System.String.Compare(
            e.CellValue1.ToString(), e.CellValue2.ToString());

        // If the cells are equal, sort based on the ID column.
        if (e.SortResult == 0 && e.Column.Name != "îdn")
        {
            e.SortResult = System.String.Compare(
                dataGridView1.Rows[e.RowIndex1].Cells["îdn"].Value.ToString(),
                dataGridView1.Rows[e.RowIndex2].Cells["îdn"].Value.ToString());
        }
        e.Handled = true;
    }


Allerdings schaffe ich es nicht, dieses Ereigniss aufzurufen.
Den Handler hab ich zwar drin, aber der aufruf klappt nicht

C#-Quelltext
1:
2:
        dataGridView1.SortCompare += new DataGridViewSortCompareEventHandler(
            this.dataGridView1_SortCompare);


Daher nun meine Frage, krieg ich überhaupt mein Problem damit gelöst und wenn ja wie schaffe ich es dass das Ereigniss aufgerufen wird?

Danke


Th69 - Do 19.05.11 10:48

Hallo,

hast du den Hinweis in der MSDN dazu gelesen?
MSDN hat folgendes geschrieben:

Dieses Ereignis tritt nur ein, wenn die DataSource-Eigenschaft nicht festgelegt ist und der VirtualMode-Eigenschaftenwert false ist.

Dieses Ereignis vergleicht Zellpaare in der Spalte, die sortiert wird. Es tritt nur ein, wenn auf den Header einer Spalte mit dem SortMode-Eigenschaftenwert Automatic geklickt wird oder wenn Sie die Sort(DataGridViewColumn, ListSortDirection)-Überladung aufrufen. Wenn dieses Ereignis für eine Spalte mit dem SortMode-Eigenschaftenwert Programmatic eintritt, müssen Sie das Sortiersymbol über die DataGridViewColumnHeaderCell.SortGlyphDirection-Eigenschaft anzeigen.

In deinem Fall also einfach die DataGridView.Sort-Methode aufrufen.