DataGridView.Sort Metode
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
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
Pengecualian
comparer
adalah 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
.
dataGridViewColumn
adalah 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.