DataGridView.Sort Methode

Definition

Sortiert den Inhalt des DataGridView-Steuerelements.Sorts the contents of the DataGridView control.

Überlädt

Sort(IComparer)

Sortiert den Inhalt des DataGridView-Steuerelements mit einer Implementierung der IComparer-Schnittstelle.Sorts the contents of the DataGridView control using an implementation of the IComparer interface.

Sort(DataGridViewColumn, ListSortDirection)

Sortiert den Inhalt des DataGridView-Steuerelements in aufsteigender oder absteigender Reihenfolge auf Grundlage des Inhalts der angegebenen Spalte.Sorts the contents of the DataGridView control in ascending or descending order based on the contents of the specified column.

Sort(IComparer)

Sortiert den Inhalt des DataGridView-Steuerelements mit einer Implementierung der IComparer-Schnittstelle.Sorts the contents of the DataGridView control using an implementation of the IComparer interface.

public:
 virtual void Sort(System::Collections::IComparer ^ comparer);
public virtual void Sort (System.Collections.IComparer comparer);
abstract member Sort : System.Collections.IComparer -> unit
override this.Sort : System.Collections.IComparer -> unit
Public Overridable Sub Sort (comparer As IComparer)

Parameter

comparer
IComparer

Eine Implementierung des IComparer, der die benutzerdefinierte Sortieroperation ausführt.An implementation of IComparer that performs the custom sorting operation.

Ausnahmen

comparer ist null.comparer is null.

Für VirtualMode ist true festgelegt.VirtualMode is set to true.

- oder --or- DataSource ist nicht null.DataSource is not null.

Beispiele

Im folgenden Codebeispiel wird veranschaulicht, wie die Sort-Methoden Überladung in einem Szenario mit mehreren Spalten verwendet wird.The following code example demonstrates how to use the Sort method overload in a multiple column sort scenario. In diesem Beispiel wird die IComparer-Schnittstelle in der RowComparer-Klasse implementiert.In this example, the IComparer interface is implemented in the RowComparer class.

private void Button1_Click( object sender, EventArgs e )
{
    if ( RadioButton1.Checked == true )
    {
        DataGridView1.Sort( new RowComparer( SortOrder.Ascending ) );
    }
    else if ( RadioButton2.Checked == true )
    {
        DataGridView1.Sort( new RowComparer( SortOrder.Descending ) );
    }
}

private class RowComparer : System.Collections.IComparer
{
    private static int sortOrderModifier = 1;

    public RowComparer(SortOrder sortOrder)
    {
        if (sortOrder == SortOrder.Descending)
        {
            sortOrderModifier = -1;
        }
        else if (sortOrder == SortOrder.Ascending)
        {
            sortOrderModifier = 1;
        }
    }

    public int Compare(object x, object y)
    {
        DataGridViewRow DataGridViewRow1 = (DataGridViewRow)x;
        DataGridViewRow DataGridViewRow2 = (DataGridViewRow)y;

        // Try to sort based on the Last Name column.
        int CompareResult = System.String.Compare(
            DataGridViewRow1.Cells[1].Value.ToString(),
            DataGridViewRow2.Cells[1].Value.ToString());

        // If the Last Names are equal, sort based on the First Name.
        if ( CompareResult == 0 )
        {
            CompareResult = System.String.Compare(
                DataGridViewRow1.Cells[0].Value.ToString(),
                DataGridViewRow2.Cells[0].Value.ToString());
        }
        return CompareResult * sortOrderModifier;
    }
}
Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) _
Handles Button1.Click
    If RadioButton1.Checked = True Then
        DataGridView1.Sort(New RowComparer(SortOrder.Ascending))
    ElseIf RadioButton2.Checked = True Then
        DataGridView1.Sort(New RowComparer(SortOrder.Descending))
    End If
End Sub

Private Class RowComparer
    Implements System.Collections.IComparer

    Private sortOrderModifier As Integer = 1

    Public Sub New(ByVal sortOrder As SortOrder)
        If sortOrder = sortOrder.Descending Then
            sortOrderModifier = -1
        ElseIf sortOrder = sortOrder.Ascending Then

            sortOrderModifier = 1
        End If
    End Sub

    Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer _
        Implements System.Collections.IComparer.Compare

        Dim DataGridViewRow1 As DataGridViewRow = CType(x, DataGridViewRow)
        Dim DataGridViewRow2 As DataGridViewRow = CType(y, DataGridViewRow)

        ' Try to sort based on the Last Name column.
        Dim CompareResult As Integer = System.String.Compare( _
            DataGridViewRow1.Cells(1).Value.ToString(), _
            DataGridViewRow2.Cells(1).Value.ToString())

        ' If the Last Names are equal, sort based on the First Name.
        If CompareResult = 0 Then
            CompareResult = System.String.Compare( _
                DataGridViewRow1.Cells(0).Value.ToString(), _
                DataGridViewRow2.Cells(0).Value.ToString())
        End If
        Return CompareResult * sortOrderModifier
    End Function
End Class

Hinweise

Diese Methode ermöglicht die erweiterte Anpassung der Sortierfunktion der DataGridView-Klasse.This method allows advanced customization of the sorting feature of the DataGridView class. Um einen hochgradig angepassten Sortiervorgang zu implementieren, können Sie einen Ereignishandler für das ColumnHeaderMouseClick-Ereignis schreiben und diese Methode mit einer Instanz einer Klasse aufrufen, die die System.Collections.IComparer-Schnittstelle als Parameter implementiert.In order to implement a highly customized sorting operation, you can write an event handler for the ColumnHeaderMouseClick event and call this method with an instance of a class that implements the System.Collections.IComparer interface as a parameter. In diesem Fall legen Sie die DataGridViewColumn.SortMode-Eigenschaft in der Regel auf DataGridViewColumnSortMode.Programmatic fest, um die automatische Sortierung zu deaktivieren und Platz für ein Sortier Symbol zu belassen.In this case, you will typically set the DataGridViewColumn.SortMode property to DataGridViewColumnSortMode.Programmatic to disable automatic sorting and to leave room for a sorting glyph. Wenn Sie nach Spalten sortieren, die auf den programmgesteuerten Sortiermodus festgelegt sind, müssen Sie das Sortier Symbol Selbstanzeigen, indem Sie die DataGridViewColumnHeaderCell.SortGlyphDirection-Eigenschaft festlegen.When sorting by columns set to programmatic sort mode, you must display the sorting glyph yourself by setting the DataGridViewColumnHeaderCell.SortGlyphDirection property.

Diese Methode funktioniert nur, wenn die DataSource-Eigenschaft nicht festgelegt ist.This method works only when the DataSource property is not set. Wenn Sie das DataGridView-Steuerelement an eine externe Datenquelle binden, müssen Sie die von dieser Datenquelle bereitgestellten Sortiervorgänge verwenden.When you bind the DataGridView control to an external data source, you must use the sorting operations provided by that data source. Wenn Sie Ihre eigene Datenquelle durch Implementieren des virtuellen Modus bereitstellen, müssen Sie auch die Sortiervorgänge selbst durchführen.When you provide your own data source by implementing virtual mode, you must also handle the sorting operations yourself.

Wenn Sie diese Methode aufrufen, wird die CurrentCell-Eigenschaft automatisch auf null festgelegt.Calling this method automatically sets the CurrentCell property to null.

Siehe auch

Sort(DataGridViewColumn, ListSortDirection)

Sortiert den Inhalt des DataGridView-Steuerelements in aufsteigender oder absteigender Reihenfolge auf Grundlage des Inhalts der angegebenen Spalte.Sorts the contents of the DataGridView control in ascending or descending order based on the contents of the specified column.

public:
 virtual void Sort(System::Windows::Forms::DataGridViewColumn ^ dataGridViewColumn, System::ComponentModel::ListSortDirection direction);
public virtual void Sort (System.Windows.Forms.DataGridViewColumn dataGridViewColumn, System.ComponentModel.ListSortDirection direction);
abstract member Sort : System.Windows.Forms.DataGridViewColumn * System.ComponentModel.ListSortDirection -> unit
override this.Sort : System.Windows.Forms.DataGridViewColumn * System.ComponentModel.ListSortDirection -> unit

Parameter

dataGridViewColumn
DataGridViewColumn

Die Spalte, nach der der Inhalt der DataGridView sortiert werden soll.The column by which to sort the contents of the DataGridView.

direction
ListSortDirection

Einer der ListSortDirection-Werte.One of the ListSortDirection values.

Ausnahmen

Die angegebene Spalte ist nicht Teil dieses DataGridView.The specified column is not part of this DataGridView.

- oder --or- Die DataSource-Eigenschaft wurde festgelegt, und die IsDataBound-Eigenschaft der angegebenen Spalte gibt false zurück.The DataSource property has been set and the IsDataBound property of the specified column returns false.

dataGridViewColumn ist null.dataGridViewColumn is null.

Die VirtualMode -Eigenschaft wurde auf true festgelegt, und die IsDataBound -Eigenschaft der angegebenen Spalte gibt falsezurück.The VirtualMode property is set to true and the IsDataBound property of the specified column returns false.

- oder --or- Das von der DataSource-Eigenschaft angegebene Objekt implementiert nicht die IBindingList-Schnittstelle.The object specified by the DataSource property does not implement the IBindingList interface.

- oder --or- Das von der DataSource-Eigenschaft angegebene Objekt besitzt den SupportsSorting-Eigenschaftswert von false.The object specified by the DataSource property has a SupportsSorting property value of false.

Beispiele

Im folgenden Codebeispiel wird veranschaulicht, wie die Sort in einer programmgesteuerten Sortierung verwendet wird.The following code example demonstrates how to use the Sort in a programmatic sort.

private void sortButton_Click(object sender, System.EventArgs e)
{
    // Check which column is selected, otherwise set NewColumn to null.
    DataGridViewColumn newColumn =
        dataGridView1.Columns.GetColumnCount(
        DataGridViewElementStates.Selected) == 1 ?
        dataGridView1.SelectedColumns[0] : null;

    DataGridViewColumn oldColumn = dataGridView1.SortedColumn;
    ListSortDirection direction;

    // If oldColumn is null, then the DataGridView is not currently sorted.
    if (oldColumn != null)
    {
        // Sort the same column again, reversing the SortOrder.
        if (oldColumn == newColumn &&
            dataGridView1.SortOrder == SortOrder.Ascending)
        {
            direction = ListSortDirection.Descending;
        }
        else
        {
            // Sort a new column and remove the old SortGlyph.
            direction = ListSortDirection.Ascending;
            oldColumn.HeaderCell.SortGlyphDirection = SortOrder.None;
        }
    }
    else
    {
        direction = ListSortDirection.Ascending;
    }

    // If no column has been selected, display an error dialog  box.
    if (newColumn == null)
    {
        MessageBox.Show("Select a single column and try again.",
            "Error: Invalid Selection", MessageBoxButtons.OK,
            MessageBoxIcon.Error);
    }
    else
    {
        dataGridView1.Sort(newColumn, direction);
        newColumn.HeaderCell.SortGlyphDirection =
            direction == ListSortDirection.Ascending ?
            SortOrder.Ascending : SortOrder.Descending;
    }
}
Private Sub SortButton_Click(ByVal sender As Object, _
    ByVal e As EventArgs) Handles sortButton.Click

    ' Check which column is selected, otherwise set NewColumn to Nothing.
    Dim newColumn As DataGridViewColumn
    If dataGridView1.Columns.GetColumnCount(DataGridViewElementStates _
        .Selected) = 1 Then
        newColumn = dataGridView1.SelectedColumns(0)
    Else
        newColumn = Nothing
    End If

    Dim oldColumn As DataGridViewColumn = dataGridView1.SortedColumn
    Dim direction As ListSortDirection

    ' If oldColumn is null, then the DataGridView is not currently sorted.
    If oldColumn IsNot Nothing Then

        ' Sort the same column again, reversing the SortOrder.
        If oldColumn Is newColumn AndAlso dataGridView1.SortOrder = _
            SortOrder.Ascending Then
            direction = ListSortDirection.Descending
        Else

            ' Sort a new column and remove the old SortGlyph.
            direction = ListSortDirection.Ascending
            oldColumn.HeaderCell.SortGlyphDirection = SortOrder.None
        End If
    Else
        direction = ListSortDirection.Ascending
    End If


    ' If no column has been selected, display an error dialog  box.
    If newColumn Is Nothing Then
        MessageBox.Show("Select a single column and try again.", _
            "Error: Invalid Selection", MessageBoxButtons.OK, _
            MessageBoxIcon.Error)
    Else
        dataGridView1.Sort(newColumn, direction)
        If direction = ListSortDirection.Ascending Then
            newColumn.HeaderCell.SortGlyphDirection = SortOrder.Ascending
        Else
            newColumn.HeaderCell.SortGlyphDirection = SortOrder.Descending
        End If
    End If

End Sub

Hinweise

Mit dieser Methode wird der Inhalt der DataGridView sortiert, indem Werte in der angegebenen Spalte verglichen werden.This method sorts the contents of the DataGridView by comparing values in the specified column. Standardmäßig verwendet der Sortiervorgang die Compare-Methode, um Paare von Zellen in der Spalte mithilfe der DataGridViewCell.Value-Eigenschaft zu vergleichen.By default, the sort operation will use the Compare method to compare pairs of cells in the column using the DataGridViewCell.Value property.

Für Spalten, bei denen die SortMode-Eigenschaft auf DataGridViewColumnSortMode.Automatic festgelegt ist, werden die Eigenschaften SortedColumn und SortOrder automatisch festgelegt, und das entsprechende Sortier Symbol wird angezeigt.For columns with the SortMode property set to DataGridViewColumnSortMode.Automatic, the SortedColumn and SortOrder properties are set automatically and the appropriate sorting glyph is displayed. Für Spalten, deren SortMode-Eigenschaft auf DataGridViewColumnSortMode.Programmatic festgelegt ist, müssen Sie das Sortier Symbol selbst über die DataGridViewColumnHeaderCell.SortGlyphDirection-Eigenschaft anzeigen.For columns with the SortMode property set to DataGridViewColumnSortMode.Programmatic, you must display the sorting glyph yourself through the DataGridViewColumnHeaderCell.SortGlyphDirection property.

Sie können den von dieser Methode verwendeten Sortiervorgang anpassen, indem Sie das SortCompare-Ereignis behandeln.You can customize the sorting operation used by this method by handling the SortCompare event. Dieses Ereignis tritt nur auf, wenn die DataSource-Eigenschaft nicht festgelegt wurde.This event occurs only when the DataSource property has not been set.

Wenn die DataSource-Eigenschaft festgelegt wurde, funktioniert diese Methode nur für Daten gebundene Spalten.When the DataSource property has been set, this method works for data-bound columns only. Für Daten gebundene Spalten wurde ihre DataGridViewColumn.DataPropertyName-Eigenschaft festgelegt.Data-bound columns have had their DataGridViewColumn.DataPropertyName property set. Dies bewirkt, dass die DataGridViewColumn.IsDataBound-Eigenschaft true zurückgibt.This causes the DataGridViewColumn.IsDataBound property to return true.

Wenn das DataGridView-Steuerelement sowohl gebundene als auch ungebundene Spalten enthält, müssen Sie den virtuellen Modus implementieren, um die Werte der ungebundenen Spalten beizubehalten, wenn das Steuerelement nach einer gebundenen Spalte sortiert wird.If your DataGridView control contains both bound and unbound columns, you must implement virtual mode to maintain the values of the unbound columns when the control is sorted by a bound column. Legen Sie hierzu die VirtualMode-Eigenschaft auf true fest, und behandeln Sie das Ereignis CellValueNeeded.You can do this by setting the VirtualMode property to true and handling the CellValueNeeded event. Wenn die Spalte bearbeitet werden kann, sollten Sie auch das CellValuePushed-Ereignis behandeln.If the column is editable, you should also handle the CellValuePushed event. Weitere Informationen zum virtuellen Modus finden Sie unter gewusst wie: Implementieren Sie den virtuellen Modus im Windows Forms DataGridView-Steuerelement.For more information about virtual mode, see How to: Implement Virtual Mode in the Windows Forms DataGridView Control. Das Sortieren nach ungebundenen Spalten, wenn das Steuerelement Daten gebunden ist, wird nicht unterstützt.Sorting by unbound columns when the control is data-bound is not supported.

Siehe auch

Gilt für: