Bagikan melalui


DataGridView.Sort Metode

Definisi

Mengurutkan isi DataGridView kontrol.

Overload

Sort(IComparer)

Mengurutkan isi DataGridView kontrol menggunakan implementasi IComparer antarmuka.

Sort(DataGridViewColumn, ListSortDirection)

Mengurutkan isi DataGridView kontrol dalam urutan naik atau turun berdasarkan isi kolom yang ditentukan.

Sort(IComparer)

Mengurutkan isi DataGridView kontrol menggunakan implementasi IComparer antarmuka.

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

Implementasi IComparer yang melakukan operasi pengurutan kustom.

Pengecualian

compareradalah null.

VirtualMode diatur ke true.

-atau-

DataSource bukan null.

Contoh

Contoh kode berikut menunjukkan cara menggunakan Sort metode kelebihan beban dalam skenario pengurutan beberapa kolom. Dalam contoh ini, IComparer antarmuka diimplementasikan di RowComparer kelas .

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

Keterangan

Metode ini memungkinkan penyesuaian lanjutan dari fitur pengurutan DataGridView kelas. Untuk menerapkan operasi pengurutan yang sangat disesuaikan, Anda dapat menulis penanganan aktivitas untuk peristiwa dan ColumnHeaderMouseClick memanggil metode ini dengan instans System.Collections.IComparer kelas yang mengimplementasikan antarmuka sebagai parameter. Dalam hal ini, Anda biasanya akan mengatur DataGridViewColumn.SortMode properti ke DataGridViewColumnSortMode.Programmatic untuk menonaktifkan pengurutan otomatis dan meninggalkan ruang untuk pengurutan glyph. Saat mengurutkan menurut kolom yang diatur ke mode pengurutan terprogram, Anda harus menampilkan glyph pengurutan sendiri dengan mengatur DataGridViewColumnHeaderCell.SortGlyphDirection properti .

Metode ini hanya berfungsi ketika DataSource properti tidak diatur. Saat Anda mengikat kontrol ke DataGridView sumber data eksternal, Anda harus menggunakan operasi pengurutan yang disediakan oleh sumber data tersebut. Saat Anda menyediakan sumber data Anda sendiri dengan menerapkan mode virtual, Anda juga harus menangani operasi pengurutan sendiri.

Memanggil metode ini secara otomatis mengatur properti ke CurrentCellnull.

Lihat juga

Berlaku untuk

Sort(DataGridViewColumn, ListSortDirection)

Mengurutkan isi DataGridView kontrol dalam urutan naik atau turun berdasarkan isi kolom yang ditentukan.

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
Public Overridable Sub Sort (dataGridViewColumn As DataGridViewColumn, direction As ListSortDirection)

Parameter

dataGridViewColumn
DataGridViewColumn

Kolom untuk mengurutkan konten DataGridView.

direction
ListSortDirection

Salah ListSortDirection satu nilai.

Pengecualian

Kolom yang ditentukan bukan bagian dari ini DataGridView.

-atau-

Properti DataSource telah diatur dan IsDataBound properti kolom yang ditentukan mengembalikan false.

dataGridViewColumnadalah null.

Properti VirtualMode diatur ke true dan IsDataBound properti kolom yang ditentukan mengembalikan false.

-atau-

Objek yang ditentukan oleh DataSource properti tidak mengimplementasikan IBindingList antarmuka.

-atau-

Objek yang ditentukan oleh DataSource properti memiliki SupportsSorting nilai properti .false

Contoh

Contoh kode berikut menunjukkan cara menggunakan dalam pengurutan Sort terprogram.

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

Keterangan

Metode ini mengurutkan konten DataGridView dengan membandingkan nilai dalam kolom yang ditentukan. Secara default, operasi pengurutan akan menggunakan Compare metode untuk membandingkan pasangan sel dalam kolom menggunakan DataGridViewCell.Value properti .

Untuk kolom dengan properti yang SortMode diatur ke DataGridViewColumnSortMode.Automatic, SortedColumn properti dan SortOrder diatur secara otomatis dan glyph pengurutan yang sesuai ditampilkan. Untuk kolom dengan properti yang SortMode diatur ke DataGridViewColumnSortMode.Programmatic, Anda harus menampilkan glyph pengurutan sendiri melalui DataGridViewColumnHeaderCell.SortGlyphDirection properti .

Anda dapat menyesuaikan operasi pengurutan yang digunakan oleh metode ini dengan menangani SortCompare peristiwa. Kejadian ini hanya terjadi ketika DataSource properti belum ditetapkan.

DataSource Ketika properti telah diatur, metode ini hanya berfungsi untuk kolom terikat data. Kolom yang terikat data memiliki kumpulan propertinya DataGridViewColumn.DataPropertyName . Hal ini menyebabkan DataGridViewColumn.IsDataBound properti mengembalikan true.

Jika kontrol Anda DataGridView berisi kolom terikat dan tidak terikat, Anda harus menerapkan mode virtual untuk mempertahankan nilai kolom yang tidak terikat saat kontrol diurutkan menurut kolom terikat. Anda dapat melakukan ini dengan mengatur VirtualMode properti ke true dan menangani CellValueNeeded peristiwa. Jika kolom dapat diedit, Anda juga harus menangani CellValuePushed peristiwa. Untuk informasi selengkapnya tentang mode virtual, lihat Cara: Menerapkan Mode Virtual di kontrol Formulir Windows DataGridView. Pengurutan menurut kolom yang tidak terikat saat kontrol terikat data tidak didukung.

Lihat juga

Berlaku untuk