DataGridView.Sort Method (IComparer)


The .NET API Reference documentation has a new home. Visit the .NET API Browser on to see the new experience.

Sorts the contents of the DataGridView control using an implementation of the IComparer interface.

Namespace:   System.Windows.Forms
Assembly:  System.Windows.Forms (in System.Windows.Forms.dll)

public virtual void Sort(
	IComparer comparer


Type: System.Collections.IComparer

An implementation of IComparer that performs the custom sorting operation.

Exception Condition

comparer is null.


VirtualMode is set to true.


DataSource is not null.

This method allows advanced customization of the sorting feature of the DataGridView class. 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 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. When sorting by columns set to programmatic sort mode, you must display the sorting glyph yourself by setting the DataGridViewColumnHeaderCell.SortGlyphDirection property.

This method works only when the DataSource property is not set. When you bind the DataGridView control to an external data source, you must use the sorting operations provided by that data source. When you provide your own data source by implementing virtual mode, you must also handle the sorting operations yourself.

Calling this method automatically sets the CurrentCell property to null.

The following code example demonstrates how to use the Sort method overload in a multiple column sort scenario. 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(

        // If the Last Names are equal, sort based on the First Name.
        if ( CompareResult == 0 )
            CompareResult = System.String.Compare(
        return CompareResult * sortOrderModifier;

.NET Framework
Available since 2.0
Return to top