DataGridView.Sort Méthode

Définition

Trie le contenu du contrôle DataGridView.Sorts the contents of the DataGridView control.

Surcharges

Sort(IComparer)

Trie le contenu du contrôle DataGridView à l'aide d'une implémentation de l'interface IComparer.Sorts the contents of the DataGridView control using an implementation of the IComparer interface.

Sort(DataGridViewColumn, ListSortDirection)

Trie le contenu du contrôle DataGridView dans l'ordre croissant ou décroissant en fonction du contenu de la colonne spécifiée.Sorts the contents of the DataGridView control in ascending or descending order based on the contents of the specified column.

Sort(IComparer)

Trie le contenu du contrôle DataGridView à l'aide d'une implémentation de l'interface IComparer.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)

Paramètres

comparer
IComparer

Implémentation de IComparer qui exécute l'opération de tri personnalisée.An implementation of IComparer that performs the custom sorting operation.

Exceptions

comparer est null.comparer is null.

VirtualMode a la valeur true.VirtualMode is set to true.

ou-or- DataSource n’est pas un null.DataSource is not null.

Exemples

L’exemple de code suivant montre comment utiliser la surcharge de méthode Sort dans un scénario de tri sur plusieurs colonnes.The following code example demonstrates how to use the Sort method overload in a multiple column sort scenario. Dans cet exemple, l’interface IComparer est implémentée dans la classe RowComparer.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

Remarques

Cette méthode permet une personnalisation avancée de la fonctionnalité de tri de la classe DataGridView.This method allows advanced customization of the sorting feature of the DataGridView class. Afin d’implémenter une opération de tri très personnalisée, vous pouvez écrire un gestionnaire d’événements pour l’événement ColumnHeaderMouseClick et appeler cette méthode avec une instance d’une classe qui implémente l’interface System.Collections.IComparer en tant que paramètre.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. Dans ce cas, vous définissez généralement la propriété DataGridViewColumn.SortMode sur DataGridViewColumnSortMode.Programmatic pour désactiver le tri automatique et pour laisser de l’espace pour un glyphe de tri.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. En cas de tri par colonne défini sur le mode de tri par programmation, vous devez afficher vous-même le glyphe de tri en définissant la propriété DataGridViewColumnHeaderCell.SortGlyphDirection.When sorting by columns set to programmatic sort mode, you must display the sorting glyph yourself by setting the DataGridViewColumnHeaderCell.SortGlyphDirection property.

Cette méthode fonctionne uniquement lorsque la propriété DataSource n’est pas définie.This method works only when the DataSource property is not set. Lorsque vous liez le contrôle DataGridView à une source de données externe, vous devez utiliser les opérations de tri fournies par cette source de données.When you bind the DataGridView control to an external data source, you must use the sorting operations provided by that data source. Lorsque vous fournissez votre propre source de données en implémentant le mode virtuel, vous devez également gérer vous-même les opérations de tri.When you provide your own data source by implementing virtual mode, you must also handle the sorting operations yourself.

L’appel de cette méthode affecte automatiquement à la propriété CurrentCell la valeur null.Calling this method automatically sets the CurrentCell property to null.

Voir aussi

Sort(DataGridViewColumn, ListSortDirection)

Trie le contenu du contrôle DataGridView dans l'ordre croissant ou décroissant en fonction du contenu de la colonne spécifiée.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

Paramètres

dataGridViewColumn
DataGridViewColumn

Colonne selon laquelle trier le contenu du DataGridView.The column by which to sort the contents of the DataGridView.

direction
ListSortDirection

Une des valeurs de ListSortDirection.One of the ListSortDirection values.

Exceptions

La colonne spécifiée ne fait pas partie de ce DataGridView.The specified column is not part of this DataGridView.

ou-or- La propriété DataSource a été définie et la propriété IsDataBound de la colonne spécifiée retourne false.The DataSource property has been set and the IsDataBound property of the specified column returns false.

dataGridViewColumn est null.dataGridViewColumn is null.

La propriété VirtualMode a été définie sur true et la propriété IsDataBound de la colonne spécifiée retourne false.The VirtualMode property is set to true and the IsDataBound property of the specified column returns false.

- ou --or- L’objet spécifié par la propriété DataSource n’implémente pas l’interface IBindingList.The object specified by the DataSource property does not implement the IBindingList interface.

- ou --or- L’objet spécifié par la propriété DataSource a une propriété SupportsSorting dont la valeur est false.The object specified by the DataSource property has a SupportsSorting property value of false.

Exemples

L’exemple de code suivant montre comment utiliser la Sort dans un tri par programmation.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

Remarques

Cette méthode trie le contenu du DataGridView en comparant les valeurs de la colonne spécifiée.This method sorts the contents of the DataGridView by comparing values in the specified column. Par défaut, l’opération de tri utilise la méthode Compare pour comparer des paires de cellules dans la colonne à l’aide de la propriété DataGridViewCell.Value.By default, the sort operation will use the Compare method to compare pairs of cells in the column using the DataGridViewCell.Value property.

Pour les colonnes dont la propriété SortMode est définie sur DataGridViewColumnSortMode.Automatic, les propriétés SortedColumn et SortOrder sont définies automatiquement et le glyphe de tri approprié est affiché.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. Pour les colonnes dont la propriété SortMode est définie sur DataGridViewColumnSortMode.Programmatic, vous devez afficher le glyphe de tri vous-même via la propriété DataGridViewColumnHeaderCell.SortGlyphDirection.For columns with the SortMode property set to DataGridViewColumnSortMode.Programmatic, you must display the sorting glyph yourself through the DataGridViewColumnHeaderCell.SortGlyphDirection property.

Vous pouvez personnaliser l’opération de tri utilisée par cette méthode en gérant l’événement SortCompare.You can customize the sorting operation used by this method by handling the SortCompare event. Cet événement se produit uniquement lorsque la propriété DataSource n’a pas été définie.This event occurs only when the DataSource property has not been set.

Lorsque la propriété DataSource a été définie, cette méthode fonctionne uniquement pour les colonnes liées aux données.When the DataSource property has been set, this method works for data-bound columns only. La propriété DataGridViewColumn.DataPropertyName de colonnes liées aux données a été définie.Data-bound columns have had their DataGridViewColumn.DataPropertyName property set. La propriété DataGridViewColumn.IsDataBound retourne alors true.This causes the DataGridViewColumn.IsDataBound property to return true.

Si votre contrôle DataGridView contient à la fois des colonnes dépendantes et indépendantes, vous devez implémenter le mode virtuel pour conserver les valeurs des colonnes indépendantes lorsque le contrôle est trié par une colonne liée.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. Pour ce faire, vous pouvez définir la propriété VirtualMode sur true et gérer l’événement CellValueNeeded.You can do this by setting the VirtualMode property to true and handling the CellValueNeeded event. Si la colonne est modifiable, vous devez également gérer l’événement CellValuePushed.If the column is editable, you should also handle the CellValuePushed event. Pour plus d’informations sur le mode virtuel, voir How à : Implémentez le mode virtuel dans le Windows Forms contrôle DataGridView.For more information about virtual mode, see How to: Implement Virtual Mode in the Windows Forms DataGridView Control. Le tri par colonnes indépendantes lorsque le contrôle est lié aux données n’est pas pris en charge.Sorting by unbound columns when the control is data-bound is not supported.

Voir aussi

S’applique à