Saya ingin mengubah warna baris tertentu di datagridview saya. Baris harus diubah menjadi merah ketika nilai columncell 7 kurang dari nilai di columncell 10. Ada saran tentang cara menyelesaikan ini?
143
Saya ingin mengubah warna baris tertentu di datagridview saya. Baris harus diubah menjadi merah ketika nilai columncell 7 kurang dari nilai di columncell 10. Ada saran tentang cara menyelesaikan ini?
Anda perlu mengulang-ulang baris di datagridview dan kemudian membandingkan nilai kolom 7 dan 10 pada setiap baris.
Coba ini:
foreach (DataGridViewRow row in vendorsDataGridView.Rows)
if (Convert.ToInt32(row.Cells[7].Value) < Convert.ToInt32(row.Cells[10].Value))
{
row.DefaultCellStyle.BackColor = Color.Red;
}
Saya baru saja menyelidiki masalah ini (jadi saya tahu pertanyaan ini diterbitkan hampir 3 tahun yang lalu, tapi mungkin itu akan membantu seseorang ...) tetapi tampaknya pilihan yang lebih baik adalah menempatkan kode di dalam
RowPrePaint
acara sehingga Anda tidak harus melintasi setiap baris, hanya yang dilukis (sehingga akan bekerja lebih baik pada sejumlah besar data:Lampirkan ke acara tersebut
Kode acara
sumber
Anda sedang mencari
CellFormatting
acara tersebut.Berikut ini sebuah contoh.
sumber
Saya kesulitan mengubah warna teks juga - Saya tidak pernah melihat perubahan warna.
Sampai saya menambahkan kode untuk mengubah warna teks ke acara
DataBindingsComplete
untukDataGridView
. Setelah itu berhasil.Saya harap ini akan membantu orang yang menghadapi masalah yang sama.
sumber
Sesuatu seperti yang berikut ... dengan asumsi nilai dalam sel adalah Integer.
belum diuji, mohon maaf atas kesalahan apa pun.
Jika Anda tahu baris tertentu, Anda dapat melewati iterasi:
sumber
Beberapa orang suka menggunakan
Paint
,CellPainting
atauCellFormatting
acara, tetapi perhatikan bahwa mengubah gaya dalam acara ini menyebabkan panggilan rekursif. Jika Anda menggunakannyaDataBindingComplete
hanya akan dijalankan sekali. ArgumennyaCellFormatting
adalah ia dipanggil hanya pada sel yang terlihat, jadi Anda tidak harus memformat sel yang tidak terlihat, tetapi Anda memformatnya beberapa kali.sumber
Anda dapat Ubah
Backcolor
baris demi baris menggunakan condition.and Anda fungsi panggilan ini setelah menerapkanDatasource
dariDatagridView
.Inilah fungsinya untuk itu. Cukup salin dan letakkan setelah itu
Databind
sumber
sumber
Ini solusi saya untuk mengubah warna ke dataGridView dengan bindingDataSource:
sumber
Jika Anda mengikat ke (koleksi) objek beton, Anda bisa mendapatkan objek konkret melalui properti DataBoundItem dari baris. (Untuk menghindari memeriksa string ajaib dalam sel dan menggunakan properti "nyata" objek)
Contoh kerangka di bawah ini:
DTO / POCO
Mengikat ke datagridview
kemudian event handler dan mendapatkan objek konkret (bukan DataGridRow dan / atau sel)
sumber
Saya biasanya suka menggunakan acara Event GridView.RowDataBound untuk ini.
sumber
Bekerja pada Visual Studio 2010. (Saya mencobanya dan berhasil!) Ini akan melukis seluruh baris Anda.
datagridview
.CellClick
acara dan letakkan baris kode berikutnya di dalamnya.sumber
Anda belum menyebutkan bagaimana nilai diubah. Saya telah menggunakan fungsi serupa ketika pengguna memasukkan nilai. yaitu memasuki dan meninggalkan mode edit.
Menggunakan acara CellEndEdit dari datagridview.
Anda dapat menambahkan logika untuk menghapus pemberitahuan kesalahan dengan cara yang sama.
jika dalam kasus Anda, jika data dimuat secara terprogram, maka acara CellLeave dapat digunakan dengan kode yang sama.
sumber
Dengan kode ini, Anda hanya mengubah baris backcolor di mana nilai nama kolom adalah nol, sedangkan warna baris lainnya masih merupakan default.
sumber
Hanya catatan tentang pengaturan
DefaultCellStyle.BackColor
... Anda tidak dapat mengaturnya ke nilai transparan apa pun kecualiColor.Empty
. Itu nilai default. Itu secara tidak langsung menyiratkan (bagi saya, bagaimanapun) bahwa warna-warna transparan itu OK. Mereka tidak. Setiap baris yang saya atur ke warna transparan hanya menggambar warna baris yang dipilih.Saya menghabiskan terlalu banyak waktu membenturkan kepala ke dinding karena masalah ini.
sumber
Saya mendarat di sini mencari solusi untuk kasus di mana saya tidak menggunakan data binding. Tidak ada yang berhasil untuk saya, tetapi pada akhirnya saya berhasil dengan:
sumber
Jika Anda adalah pengembang terbodoh kedua di planet ini (saya menjadi yang paling bodoh), semua solusi di atas tampaknya bekerja: CellFormatting, DataSourceChanged, dan RowPrePaint. Saya lebih suka RowPrePaint.
Saya berjuang dengan ini (terlalu lama) karena saya perlu mengganti SelectionBackColor dan SelectionForeColor saya alih-alih BackColor dan ForeColor ketika saya mengubah baris yang dipilih.
sumber
sumber