Bagikan melalui


Mode Pengurutan Kolom di kontrol Formulir Windows DataGridView

DataGridView kolom memiliki tiga mode pengurutan. Mode pengurutan untuk setiap kolom ditentukan melalui SortMode properti kolom, yang dapat diatur ke salah satu nilai enumerasi berikut DataGridViewColumnSortMode .

DataGridViewColumnSortMode nilai Deskripsi
Automatic Default untuk kolom kotak teks. Kecuali header kolom digunakan untuk pilihan, mengklik header kolom secara otomatis mengurutkan DataGridView menurut kolom ini dan menampilkan glyph yang menunjukkan urutan pengurutan.
NotSortable Default untuk kolom non-kotak teks. Anda dapat mengurutkan kolom ini secara terprogram; namun, ini tidak dimaksudkan untuk pengurutan, jadi tidak ada ruang yang dicadangkan untuk glyph pengurutan.
Programmatic Anda dapat mengurutkan kolom ini secara terprogram, dan ruang dicadangkan untuk glyph pengurutan.

Anda mungkin ingin mengubah mode pengurutan untuk kolom yang defaultnya NotSortable jika berisi nilai yang dapat diurutkan secara bermakna. Misalnya, jika Anda memiliki kolom database yang berisi angka yang mewakili status item, Anda bisa menampilkan angka-angka ini sebagai ikon terkait dengan mengikat kolom gambar ke kolom database. Anda kemudian dapat mengubah nilai sel numerik menjadi nilai tampilan gambar dalam handler untuk peristiwa tersebut DataGridView.CellFormatting . Dalam hal ini, mengatur properti untuk SortModeAutomatic akan memungkinkan pengguna Anda mengurutkan kolom. Pengurutan otomatis akan memungkinkan pengguna Anda mengelompokkan item yang memiliki status yang sama meskipun status yang sesuai dengan angka tidak memiliki urutan alami. Kolom kotak centang adalah contoh lain di mana pengurutan otomatis berguna untuk mengelompokkan item dalam status yang sama.

Anda dapat mengurutkan DataGridView secara terprogram menurut nilai di kolom mana pun atau di beberapa kolom, terlepas dari pengaturannya SortMode . Pengurutan terprogram berguna ketika Anda ingin menyediakan antarmuka pengguna (UI) Anda sendiri untuk pengurutan atau saat Anda ingin menerapkan pengurutan kustom. Menyediakan UI pengurutan Anda sendiri berguna, misalnya, saat Anda mengatur DataGridView mode pemilihan untuk mengaktifkan pemilihan header kolom. Dalam hal ini, meskipun header kolom tidak dapat digunakan untuk pengurutan, Anda masih ingin header menampilkan glyph pengurutan yang sesuai, sehingga Anda akan mengatur properti ke SortModeProgrammatic.

Kolom yang diatur ke mode pengurutan terprogram tidak secara otomatis menampilkan glyph pengurutan. Untuk kolom ini, Anda harus menampilkan glyph sendiri dengan mengatur DataGridViewColumnHeaderCell.SortGlyphDirection properti . Ini diperlukan jika Anda menginginkan fleksibilitas dalam pengurutan kustom. Misalnya, jika Anda mengurutkan DataGridView menurut beberapa kolom, Anda mungkin ingin menampilkan beberapa glyph pengurutan atau tidak ada glyph pengurutan.

Meskipun Anda dapat secara terprogram mengurutkan DataGridView menurut kolom apa pun, beberapa kolom, seperti kolom tombol, mungkin tidak berisi nilai yang dapat diurutkan secara bermakna. Untuk kolom ini, SortMode pengaturan NotSortable properti menunjukkan bahwa kolom tidak akan pernah digunakan untuk pengurutan, sehingga tidak perlu memesan ruang di header untuk pengurutan glyph.

DataGridView Saat diurutkan, Anda dapat menentukan kolom pengurutan dan urutan pengurutan dengan memeriksa nilai SortedColumn properti dan SortOrder . Nilai-nilai ini tidak bermakna setelah operasi pengurutan kustom. Untuk informasi selengkapnya tentang pengurutan kustom, lihat bagian Pengurutan Kustom nanti dalam topik ini.

Saat kontrol yang DataGridView berisi kolom terikat dan tidak terikat diurutkan, nilai dalam kolom yang tidak terikat tidak dapat dipertahankan secara otomatis. Untuk mempertahankan nilai-nilai ini, Anda harus menerapkan mode virtual dengan mengatur VirtualMode properti ke true dan menangani CellValueNeeded peristiwa dan CellValuePushed . Untuk informasi selengkapnya, lihat Cara: Menerapkan Mode Virtual di Formulir Windows Kontrol DataGridView. Pengurutan menurut kolom yang tidak terikat dalam mode terikat tidak didukung.

Pengurutan Terprogram

Anda dapat mengurutkan DataGridView secara terprogram dengan memanggil metodenya Sort .

Kelebihan Sort(DataGridViewColumn,ListSortDirection) metode Sort mengambil DataGridViewColumn nilai enumerasi dan ListSortDirection sebagai parameter. Kelebihan beban ini berguna saat mengurutkan menurut kolom dengan nilai yang dapat diurutkan secara bermakna, tetapi yang tidak ingin Anda konfigurasi untuk pengurutan otomatis. Saat Anda memanggil kelebihan beban ini dan meneruskan kolom dengan SortMode nilai DataGridViewColumnSortMode.Automaticproperti , SortedColumn properti dan SortOrder diatur secara otomatis dan glyph pengurutan yang sesuai muncul di header kolom.

Catatan

DataGridView Ketika kontrol terikat ke sumber data eksternal dengan mengatur DataSource properti , Sort(DataGridViewColumn,ListSortDirection) metode kelebihan beban tidak berfungsi untuk kolom yang tidak terikat. Selain itu, ketika VirtualMode properti adalah true, Anda dapat memanggil kelebihan beban ini hanya untuk kolom terikat. Untuk menentukan apakah kolom terikat data, periksa IsDataBound nilai properti. Pengurutan kolom yang tidak terikat dalam mode terikat tidak didukung.

Pengurutan Kustom

Anda dapat menyesuaikan DataGridView dengan menggunakan Sort(IComparer) kelebihan beban Sort metode atau dengan menangani SortCompare peristiwa.

Kelebihan Sort(IComparer) metode mengambil instans IComparer kelas yang mengimplementasikan antarmuka sebagai parameter. Kelebihan beban ini berguna ketika Anda ingin menyediakan pengurutan kustom; misalnya, ketika nilai dalam kolom tidak memiliki urutan pengurutan alami atau ketika urutan pengurutan alami tidak pantas. Dalam hal ini, Anda tidak dapat menggunakan pengurutan otomatis, tetapi Anda mungkin masih ingin pengguna mengurutkan dengan mengklik header kolom. Anda dapat memanggil kelebihan beban ini dalam handler untuk ColumnHeaderMouseClick peristiwa jika Anda tidak menggunakan header kolom untuk pilihan.

Catatan

Kelebihan Sort(IComparer) beban metode hanya berfungsi ketika DataGridView kontrol tidak terikat ke sumber data eksternal dan VirtualMode nilai properti adalah false. Untuk mengkustomisasi pengurutan untuk kolom yang terikat ke sumber data eksternal, Anda harus menggunakan operasi pengurutan yang disediakan oleh sumber data. Dalam mode virtual, Anda harus menyediakan operasi pengurutan Anda sendiri untuk kolom yang tidak terikat.

Untuk menggunakan metode kelebihan Sort(IComparer) beban, Anda harus membuat kelas Anda sendiri yang mengimplementasikan IComparer antarmuka. Antarmuka ini mengharuskan kelas Anda untuk menerapkan IComparer.Compare metode , yang DataGridView melewati DataGridViewRow objek sebagai input ketika Sort(IComparer) metode kelebihan beban dipanggil. Dengan ini, Anda dapat menghitung urutan baris yang benar berdasarkan nilai di kolom apa pun.

Kelebihan Sort(IComparer) beban metode tidak mengatur SortedColumn properti dan SortOrder , jadi Anda harus selalu mengatur DataGridViewColumnHeaderCell.SortGlyphDirection properti untuk menampilkan glyph pengurutan.

Sebagai alternatif untuk Sort(IComparer) metode kelebihan beban, Anda dapat menyediakan pengurutan kustom dengan mengimplementasikan handler untuk peristiwa tersebut SortCompare . Kejadian ini terjadi ketika pengguna mengklik header kolom yang dikonfigurasi untuk pengurutan otomatis atau saat Anda memanggil Sort(DataGridViewColumn,ListSortDirection) kelebihan beban Sort metode. Peristiwa terjadi untuk setiap pasangan baris dalam kontrol, memungkinkan Anda menghitung urutan yang benar.

Catatan

Peristiwa SortCompare tidak terjadi ketika DataSource properti diatur atau ketika VirtualMode nilai properti adalah true.

Baca juga