Bagikan melalui


Gaya Sel dalam Kontrol Formulir Windows DataGridView

Setiap sel dalam DataGridView kontrol dapat memiliki gayanya sendiri, seperti format teks, warna latar belakang, warna latar depan, dan font. Namun, biasanya, beberapa sel akan berbagi karakteristik gaya tertentu.

Grup sel yang berbagi gaya dapat menyertakan semua sel dalam baris atau kolom tertentu, semua sel yang berisi nilai tertentu, atau semua sel dalam kontrol. Karena grup ini tumpang tindih, setiap sel mungkin mendapatkan informasi gayanya dari lebih dari satu tempat. Misalnya, Anda mungkin ingin setiap sel dalam DataGridView kontrol menggunakan font yang sama, tetapi hanya sel dalam kolom mata uang yang menggunakan format mata uang, dan hanya sel mata uang dengan angka negatif untuk menggunakan warna latar depan merah.

Kelas DataGridViewCellStyle

Kelas DataGridViewCellStyle berisi properti berikut yang terkait dengan gaya visual:

Kelas ini juga berisi properti berikut yang terkait dengan pemformatan:

Untuk informasi selengkapnya tentang properti ini dan properti gaya sel lainnya, lihat DataGridViewCellStyle dokumentasi referensi dan topik yang tercantum di bagian Lihat Juga di bawah ini.

Menggunakan Objek DataGridViewCellStyle

Anda dapat mengambil DataGridViewCellStyle objek dari berbagai properti DataGridViewkelas , , DataGridViewColumnDataGridViewRow, dan DataGridViewCell dan dan kelas turunannya. Jika salah satu properti ini belum ditetapkan, mengambil nilainya akan membuat objek baru DataGridViewCellStyle . Anda juga dapat membuat instans objek Anda sendiri DataGridViewCellStyle dan menetapkannya ke properti ini.

Anda dapat menghindari duplikasi informasi gaya yang tidak perlu dengan berbagi DataGridViewCellStyle objek di antara beberapa DataGridView elemen. Karena gaya yang diatur pada tingkat kontrol, kolom, dan baris difilter ke bawah melalui setiap tingkat ke tingkat sel, Anda juga dapat menghindari duplikasi gaya dengan mengatur hanya properti gaya tersebut di setiap tingkat yang berbeda dari tingkat di atas. Ini dijelaskan secara lebih rinci di bagian Warisan Gaya yang mengikutinya.

Tabel berikut mencantumkan properti utama yang mendapatkan atau mengatur DataGridViewCellStyle objek.

Properti Kelas Deskripsi
DefaultCellStyle DataGridViewkelas , , DataGridViewColumnDataGridViewRow, dan turunan Mendapatkan atau mengatur gaya default yang digunakan oleh semua sel di seluruh kontrol (termasuk sel header), dalam kolom, atau dalam baris.
RowsDefaultCellStyle DataGridView Mendapatkan atau mengatur gaya sel default yang digunakan oleh semua baris dalam kontrol. Ini tidak termasuk sel header.
AlternatingRowsDefaultCellStyle DataGridView Mendapatkan atau mengatur gaya sel default yang digunakan oleh baris alternatif dalam kontrol. Digunakan untuk membuat efek seperti ledger.
RowHeadersDefaultCellStyle DataGridView Mendapatkan atau mengatur gaya sel default yang digunakan oleh header baris kontrol. Ditimpa oleh tema saat ini jika gaya visual diaktifkan.
ColumnHeadersDefaultCellStyle DataGridView Mendapatkan atau mengatur gaya sel default yang digunakan oleh header kolom kontrol. Ditimpa oleh tema saat ini jika gaya visual diaktifkan.
Style DataGridViewCell dan kelas turunan Mendapatkan atau mengatur gaya yang ditentukan di tingkat sel. Gaya ini mengambil alih yang diwariskan dari tingkat yang lebih tinggi.
InheritedStyle DataGridViewCellkelas , , DataGridViewRowDataGridViewColumn, dan turunan Mendapatkan semua gaya yang saat ini diterapkan ke sel, baris, atau kolom, termasuk gaya yang diwarisi dari tingkat yang lebih tinggi.

Seperti disebutkan di atas, mendapatkan nilai properti gaya secara otomatis membuat instans objek baru DataGridViewCellStyle jika properti belum ditetapkan sebelumnya. Untuk menghindari pembuatan objek ini secara tidak perlu, kelas baris dan kolom memiliki HasDefaultCellStyle properti yang dapat Anda periksa untuk menentukan apakah DefaultCellStyle properti telah diatur. Demikian pula, kelas sel memiliki HasStyle properti yang menunjukkan apakah Style properti telah diatur.

Setiap properti gaya memiliki peristiwa PropertyNameChanged yang sesuai pada DataGridView kontrol. Untuk properti baris, kolom, dan sel, nama peristiwa dimulai dengan "Row", "Column", atau "Cell" (misalnya, RowDefaultCellStyleChanged). Masing-masing peristiwa ini terjadi ketika properti gaya yang sesuai diatur ke objek yang berbeda DataGridViewCellStyle . Peristiwa ini tidak terjadi saat Anda mengambil DataGridViewCellStyle objek dari properti gaya dan memodifikasi nilai propertinya. Untuk merespons perubahan pada objek gaya sel itu CellStyleContentChanged sendiri, tangani peristiwa.

Warisan Gaya

Masing-masing DataGridViewCell mendapatkan penampilannya dari propertinya InheritedStyle . Objek DataGridViewCellStyle yang dikembalikan oleh properti ini mewarisi nilainya dari hierarki properti tipe DataGridViewCellStyle. Properti ini tercantum di bawah ini dalam urutan InheritedStyle untuk sel non-header mendapatkan nilainya.

  1. DataGridViewCell.Style

  2. DataGridViewRow.DefaultCellStyle

  3. DataGridView.AlternatingRowsDefaultCellStyle (hanya untuk sel dalam baris dengan angka indeks ganjil)

  4. DataGridView.RowsDefaultCellStyle

  5. DataGridViewColumn.DefaultCellStyle

  6. DataGridView.DefaultCellStyle

Untuk sel header baris dan kolom, InheritedStyle properti diisi oleh nilai dari daftar properti sumber berikut dalam urutan tertentu.

  1. DataGridViewCell.Style

  2. DataGridView.ColumnHeadersDefaultCellStyle atau DataGridView.RowHeadersDefaultCellStyle

  3. DataGridView.DefaultCellStyle

Diagram berikut mengilustrasikan hubungan ini.

Properties of type DataGridViewCellStyle

Anda juga dapat mengakses gaya yang diwariskan oleh baris dan kolom tertentu. Properti kolom InheritedStyle mewarisi nilainya dari properti berikut.

  1. DataGridViewColumn.DefaultCellStyle

  2. DataGridView.DefaultCellStyle

Properti baris InheritedStyle mewarisi nilainya dari properti berikut.

  1. DataGridViewRow.DefaultCellStyle

  2. DataGridView.AlternatingRowsDefaultCellStyle (hanya untuk sel dalam baris dengan angka indeks ganjil)

  3. DataGridView.RowsDefaultCellStyle

  4. DataGridView.DefaultCellStyle

Untuk setiap properti dalam objek yang DataGridViewCellStyleInheritedStyle dikembalikan oleh properti, nilai properti diperoleh dari gaya sel pertama dalam daftar yang sesuai yang memiliki properti terkait yang diatur ke nilai selain DataGridViewCellStyle default kelas.

Tabel berikut ini menggambarkan bagaimana ForeColor nilai properti untuk contoh sel diwarisi dari kolom yang berisi.

Properti jenis DataGridViewCellStyle Contoh ForeColor nilai untuk objek yang diambil
DataGridViewCell.Style Color.Empty
DataGridViewRow.DefaultCellStyle Color.Red
DataGridView.AlternatingRowsDefaultCellStyle Color.Empty
DataGridView.RowsDefaultCellStyle Color.Empty
DataGridViewColumn.DefaultCellStyle Color.DarkBlue
DataGridView.DefaultCellStyle Color.Black

Dalam hal ini, Color.Red nilai dari baris sel adalah nilai riil pertama dalam daftar. Ini menjadi ForeColor nilai properti sel InheritedStyle.

Diagram berikut menggambarkan bagaimana properti yang berbeda DataGridViewCellStyle dapat mewarisi nilainya dari tempat yang berbeda.

DataGridView property-value inheritance

Dengan memanfaatkan pewarisan gaya, Anda dapat memberikan gaya yang sesuai untuk seluruh kontrol tanpa harus menentukan informasi yang sama di beberapa tempat.

Meskipun sel header berpartisipasi dalam pewarisan gaya seperti yang dijelaskan, objek yang dikembalikan oleh ColumnHeadersDefaultCellStyle properti DataGridView dan RowHeadersDefaultCellStyle kontrol memiliki nilai properti awal yang mengambil alih nilai properti objek yang dikembalikan oleh DefaultCellStyle properti. Jika Anda ingin properti diatur untuk objek yang dikembalikan oleh DefaultCellStyle properti untuk diterapkan ke header baris dan kolom, Anda harus mengatur properti objek yang sesuai yang dikembalikan oleh ColumnHeadersDefaultCellStyle properti dan RowHeadersDefaultCellStyle ke default yang ditunjukkan untuk DataGridViewCellStyle kelas .

Catatan

Jika gaya visual diaktifkan, header baris dan kolom (kecuali ) TopLeftHeaderCellsecara otomatis ditata oleh tema saat ini, mengganti gaya apa pun yang ditentukan oleh properti ini.

Jenis DataGridViewButtonColumn, DataGridViewImageColumn, dan DataGridViewCheckBoxColumn juga menginisialisasi beberapa nilai objek yang dikembalikan oleh properti kolom DefaultCellStyle . Untuk informasi selengkapnya, lihat dokumentasi referensi untuk jenis ini.

Mengatur Gaya Secara Dinamis

Untuk mengkustomisasi gaya sel dengan nilai tertentu, terapkan handler untuk peristiwa tersebut DataGridView.CellFormatting . Handler untuk kejadian ini menerima argumen jenis DataGridViewCellFormattingEventArgs . Objek ini berisi properti yang memungkinkan Anda menentukan nilai sel yang sedang diformat bersama dengan lokasinya dalam DataGridView kontrol. Objek ini juga berisi CellStyle properti yang diinisialisasi ke nilai InheritedStyle properti sel yang sedang diformat. Anda bisa mengubah properti gaya sel untuk menentukan informasi gaya yang sesuai dengan nilai dan lokasi sel.

Catatan

Peristiwa RowPrePaint dan RowPostPaint juga menerima DataGridViewCellStyle objek dalam data peristiwa, tetapi dalam kasusnya, ini adalah salinan properti baris InheritedStyle untuk tujuan baca-saja, dan perubahan pada data tersebut tidak memengaruhi kontrol.

Anda juga dapat memodifikasi gaya masing-masing sel secara dinamis sebagai respons terhadap peristiwa seperti DataGridView.CellMouseEnter peristiwa dan CellMouseLeave . Misalnya, dalam handler untuk peristiwa tersebut CellMouseEnter , Anda dapat menyimpan nilai warna latar belakang sel saat ini (diambil melalui properti sel Style ), lalu mengaturnya ke warna baru yang akan menyorot sel saat mouse mengarahkan kursor ke atasnya. Dalam handler untuk peristiwa, CellMouseLeave Anda kemudian dapat memulihkan warna latar belakang ke nilai asli.

Catatan

Penembolokan nilai yang disimpan di properti sel Style penting terlepas dari apakah nilai gaya tertentu diatur. Jika Anda mengganti pengaturan gaya untuk sementara waktu, memulihkannya ke status asli "tidak diatur" memastikan bahwa sel akan kembali untuk mewarisi pengaturan gaya dari tingkat yang lebih tinggi. Jika Anda perlu menentukan gaya aktual yang berlaku untuk sel terlepas dari apakah gaya diwariskan, gunakan properti sel InheritedStyle .

Baca juga