DataGridView.Sort DataGridView.Sort DataGridView.Sort DataGridView.Sort Method

定義

DataGridView コントロールの内容を並べ替えます。Sorts the contents of the DataGridView control.

オーバーロード

Sort(IComparer) Sort(IComparer) Sort(IComparer) Sort(IComparer)

IComparer インターフェイスの実装を使用して、DataGridView コントロールの内容を並べ替えます。Sorts the contents of the DataGridView control using an implementation of the IComparer interface.

Sort(DataGridViewColumn, ListSortDirection) Sort(DataGridViewColumn, ListSortDirection) Sort(DataGridViewColumn, ListSortDirection)

指定された列の内容に基づいて、DataGridView コントロールの内容を昇順または降順で並べ替えます。Sorts the contents of the DataGridView control in ascending or descending order based on the contents of the specified column.

Sort(IComparer) Sort(IComparer) Sort(IComparer) Sort(IComparer)

IComparer インターフェイスの実装を使用して、DataGridView コントロールの内容を並べ替えます。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)

パラメーター

comparer
IComparer IComparer IComparer IComparer

カスタム並べ替え操作を実行する IComparer の実装。An implementation of IComparer that performs the custom sorting operation.

例外

VirtualModetrue に設定されます。VirtualMode is set to true.

- または --or- DataSourcenull ではありません。DataSource is not null.

次のコード例は、使用する方法を示します、Sort複数列並べ替えシナリオでは、メソッドのオーバー ロードします。The following code example demonstrates how to use the Sort method overload in a multiple column sort scenario. この例で、IComparerでインターフェイスを実装、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

注釈

このメソッドでの並べ替え機能の高度なカスタマイズ、DataGridViewクラス。This method allows advanced customization of the sorting feature of the DataGridView class. イベント ハンドラーを記述する度にカスタマイズされた並べ替え操作を実装するために、ColumnHeaderMouseClickイベントを実装するクラスのインスタンスでは、このメソッドを呼び出すと、System.Collections.IComparerインターフェイスをパラメーターとして。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. 設定通常ここで、DataGridViewColumn.SortModeプロパティをDataGridViewColumnSortMode.Programmatic自動並べ替えを無効にして、並べ替えグリフ用に余地を残します。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. プログラムによる並べ替えモードに設定された列を並べ替えるときにする必要があります、並べ替えグリフ自分で設定して表示する、DataGridViewColumnHeaderCell.SortGlyphDirectionプロパティ。When sorting by columns set to programmatic sort mode, you must display the sorting glyph yourself by setting the DataGridViewColumnHeaderCell.SortGlyphDirection property.

この方法は場合にのみ、機能、DataSourceプロパティは設定されません。This method works only when the DataSource property is not set. バインドすると、DataGridViewコントロール、外部データ ソースには、そのデータ ソースによって提供される並べ替え操作を使用する必要があります。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.

自動的にセットでこのメソッドを呼び出す、CurrentCellプロパティをnullします。Calling this method automatically sets the CurrentCell property to null.

こちらもご覧ください

Sort(DataGridViewColumn, ListSortDirection) Sort(DataGridViewColumn, ListSortDirection) Sort(DataGridViewColumn, ListSortDirection)

指定された列の内容に基づいて、DataGridView コントロールの内容を昇順または降順で並べ替えます。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

パラメーター

dataGridViewColumn
DataGridViewColumn DataGridViewColumn DataGridViewColumn DataGridViewColumn

DataGridView の内容を並べ替えるキーとなる列。The column by which to sort the contents of the DataGridView.

例外

指定された列は、この DataGridView の一部ではありません。The specified column is not part of this DataGridView.

- または --or- DataSource プロパティが設定されていて、指定された列の IsDataBound プロパティが false を返します。The DataSource property has been set and the IsDataBound property of the specified column returns false.

dataGridViewColumnnull です。dataGridViewColumn is null.

VirtualMode プロパティが true に設定されていて、指定された列の IsDataBound プロパティが false を返します。The VirtualMode property is set to true and the IsDataBound property of the specified column returns false.

- または --or- DataSource プロパティによって指定されたオブジェクトが IBindingList インターフェイスを実装していません。The object specified by the DataSource property does not implement the IBindingList interface.

- または --or- DataSource プロパティによって指定されたオブジェクトには、falseSupportsSorting プロパティ値が設定されていますす。The object specified by the DataSource property has a SupportsSorting property value of false.

次のコード例は、使用する方法を示します、Sortでプログラムによる並べ替え。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

注釈

このメソッドの内容を並べ替えます、DataGridViewによって指定された列の値を比較します。This method sorts the contents of the DataGridView by comparing values in the specified column. 既定では、並べ替え操作が使用されます、Compareメソッドを使用して、列内のセルのペアを比較する、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.

列に対して、SortModeプロパティに設定DataGridViewColumnSortMode.AutomaticSortedColumnSortOrderプロパティが自動的に設定し、適切な並べ替えグリフが表示されます。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. 列に対して、SortModeプロパティに設定DataGridViewColumnSortMode.Programmatic、を通じて、自分で、並べ替えグリフに表示する必要があります、DataGridViewColumnHeaderCell.SortGlyphDirectionプロパティ。For columns with the SortMode property set to DataGridViewColumnSortMode.Programmatic, you must display the sorting glyph yourself through the DataGridViewColumnHeaderCell.SortGlyphDirection property.

処理することによって、このメソッドで使用される並べ替え操作をカスタマイズすることができます、SortCompareイベント。You can customize the sorting operation used by this method by handling the SortCompare event. のみでこのイベントが発生したときに、DataSourceプロパティが設定されていません。This event occurs only when the DataSource property has not been set.

ときに、DataSourceプロパティが設定されている、このメソッドは、データ バインドされた列のみに機能します。When the DataSource property has been set, this method works for data-bound columns only. データ バインドされた列は必要がありました。 そのDataGridViewColumn.DataPropertyNameプロパティ セット。Data-bound columns have had their DataGridViewColumn.DataPropertyName property set. これにより、DataGridViewColumn.IsDataBoundプロパティを返すtrueします。This causes the DataGridViewColumn.IsDataBound property to return true.

場合、DataGridViewコントロールにバインドされていないとバインドの両方の列が含まれている、コントロールがバインドされた列で並べ替えられる場合は、バインドされていない列の値を維持するために仮想モードを実装する必要があります。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. 設定してこれを行う、VirtualModeプロパティをtrueと処理、CellValueNeededイベント。You can do this by setting the VirtualMode property to true and handling the CellValueNeeded event. 処理する必要がある、列が編集可能な場合、CellValuePushedイベント。If the column is editable, you should also handle the CellValuePushed event. 仮想モードの詳細については、次を参照してください。方法。仮想モードを実装で、Windows フォーム DataGridView コントロールします。For more information about virtual mode, see How to: Implement Virtual Mode in the Windows Forms DataGridView Control. コントロールがデータ バインドされたときにバインドされていない列で並べ替えることはサポートされていません。Sorting by unbound columns when the control is data-bound is not supported.

こちらもご覧ください

適用対象