Bu yazımızda DataGridView satırlarında belirli şarta göre renklendirme ve hücrede yazı renginin değiştirilmesinin nasıl yapılacağı ile ilgili bir örnek oluşturacağız. Örneğimizde bir şirkete ait aylık gelir tablosunda belirleyeceğimiz tutara uygun olan satırları renklendireceğiz.
Örneğimizde dbSirket isimli access veritabanından gelir tablosunu kullanacağız. Bu tablodaki verileri listeledikten sonra dataGridView‘ de bulunan ilgili satırın gelirin 100.000 den büyük, 50.000 den büyük ve 0-50.000 arasında olması durumunda farklı renklerde olmasını sağlayacağız. Ayrıca 0-50.000 arası olması durumunda yazı rengininde değiştirilmesini sağlayacağız.
Örneğimize ait kodlar ve ekran çıktısı aşağıdaki gibi olcaktır.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Data.OleDb; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace DataGridRenklendirme { public partial class Form1 : Form { public Form1() { InitializeComponent(); } OleDbConnection con=new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=dbSirket.accdb"); OleDbDataAdapter da; void Doldur() { DataTable dt=new DataTable(); string sql = "SELECT *FROM Gelir"; da = new OleDbDataAdapter(sql, con); da.Fill(dt); dataGridView1.DataSource = dt; } private void Form1_Load(object sender, EventArgs e) { Doldur(); for (int i = 0; i < dataGridView1.Rows.Count - 1; i++) { Application.DoEvents(); // Math.DivRem(i, 2, out sayi); DataGridViewCellStyle renk = new DataGridViewCellStyle(); if (Convert.ToInt32(dataGridView1.Rows[i].Cells["gelir"].Value) > 100000) { renk.BackColor = Color.YellowGreen; } else if (Convert.ToInt32(dataGridView1.Rows[i].Cells["gelir"].Value) > 50000) { renk.BackColor = Color.Orange; } else if (Convert.ToInt32(dataGridView1.Rows[i].Cells["gelir"].Value) > 0) { renk.BackColor = Color.Red; renk.ForeColor = Color.White; } dataGridView1.Rows[i].DefaultCellStyle = renk; } } } } |
Örneği aşağıdaki linkten indirebilirsiniz.
selamunaleykum admin bir sorum olacak sana
for (int i = 0; i <= dataGridView1.Rows.Count – 1; i++)
{
foreach (DataGridViewRow row in dataGridView1.Rows)
{
foreach (DataGridViewCell cell in dataGridView1.Rows[i].Cells)
{
if (cell.Value != null)
{
if (cell.Value.ToString().ToUpper() == "1-TAM BOYUN KESİLMESİ")
{
///şartı bu olanların 9. sütunda olan sayısal verilerinin toplanmasını istiyorum ustam lakin bir türlü yapamadım.
cell.Style.BackColor = Color.DarkTurquoise;
break;
} }
bu şartı sağlatamadım bir türlü nerede hata yapıyorum
else if (Convert.ToString(textBox1.Text) == Convert.ToString(dataGridView1.Rows[i].Cells[“estas_kodu”].Value) )
{
VeriDoldur();
}
hocam burada aynı zamanda operasyon_adi’na göre artan şelide sıralama yaptırmak istiyorum lakin bir türlü olmadı yardımcı olurmusun
baglanti.Open();
string sql = “SELECT * FROM kayit Where tarih BETWEEN @tar1 and @tar2 and estas_kodu=@veri”;
DataTable dt = new DataTable();
OleDbDataAdapter adp = new OleDbDataAdapter(sql, baglanti);
adp.SelectCommand.Parameters.AddWithValue(“@tar1”, dateTimePicker1.Value);
adp.SelectCommand.Parameters.AddWithValue(“@tar2”, dateTimePicker2.Value);
adp.SelectCommand.Parameters.AddWithValue(“@veri”, textBox1.Text.ToString());
adp.Fill(dt);
baglanti.Close();
dataGridView1.DataSource = dt;
order by asc
sorgunun sonuna yaparak artan şekilde sıralama yapabilirsin.
Daha fazla sıralama örneği için sitedeki https://www.yazilimkodlama.com/sql-server-2/sql-calisma-sorulari/ örneklerini incelemeni öneririm.
admin çok teşekkür ederim
hocam merhaba şu şartı bi sağlayamadım hatayı nerede yapıyorum acaba
private void button1_Click(object sender, EventArgs e)
{
foreach (DataGridViewRow row in dataGridView1.Rows)
{
for (int i = 0; i < dataGridView1.Rows.Count; ++i)
{
if (textBox1.Text == "")
{
MessageBox.Show("Boş geçmeyiniz");
}
else if (textBox1.Text == (Convert.ToString(row.Cells["estas_kodu"].Value)))
{
VeriDoldur();
}
else
{
MessageBox.Show("böyle bir estas koduna ait veri bulunmamaktadır");
}
}
}
}
Hocam Merhaba;
Aşağıdaki kodlar bende çalışmadı. Neden olabilir?
Not: dataGridView3 doğru, sütun id den sonraki sütun yani 1 o da doğru
Kodlar
for (int i = 0; i < dataGridView3.Rows.Count – 1; i++)
{
DataGridViewCellStyle rnk = new DataGridViewCellStyle();
if (dataGridView3.Rows[i].Cells[1].Value.ToString() == "Ödeme")
{
rnk.BackColor = Color.Yellow;
}
else if (dataGridView3.Rows[i].Cells[1].Value.ToString() == "Borçlanma")
{
rnk.BackColor = Color.Orange;
}
dataGridView3.Rows[i].DefaultCellStyle = rnk;
}
Merhaba. Hata olarak ne aldınız? Aşağıdaki linkte konuyla ilgili küçük bir proje var. İndirip inceleyebilirsiniz.
https://yadi.sk/d/XBqZ0G_ibszHvw
Merhabalar , Bu işlemi , Textboxa girilen ID nin oldugu satırın rengini değiştirmek üzere nasıl kullanabilirim acaba ?
Merhaba. Yine aynı yöntemle kullanabilirsiniz. textboxtan aldığınız id yi for döngüsü içinde kontrol ettirerek yapabilirsiniz.
Teşekkürler, bende işe yaradı. Yararlı bir makale olmuş.