Bu yazımızda DataGridview içinde bulunan veriler üzerinde arama yaparak aranan kaydın DataGridView hücresini renklendiren bir örnek oluşturacağız. Örneğimizde basit bir veri tabanı bağlantısı yaparak verilerin Datagridview içerisinde görüntülenmesini sağlayacağız.
Daha sonra arama yapmak için eklediğimiz Textbox kontrolünün TextChanged olayını kullanarak datagridView üzerinde Tüm hücrelerin üstünde arama işlemini gerçekleştireceğiz. Tüm hücrelerin taranması işlemi için Foreach döngüsünden faydalanacağız.
Form tasarımımız aşağıdaki gibi olacak. 1 adet DataGridView,1 adet Label ve 1 adet TextBox kontrolü ekli olacak.
Kodlarımıza bakalım.
İlk olarak aşağıdaki kütüphaneyi ekleyelim.
1 2 3 | using System.Data.OleDb; |
Daha sonra Form_Load içinde dbOkul isimli access dosyasından Ogrenci tablosunu kullanarak verilerin DataGridView üzerinde listelenmesini sağlıyoruz.
1 2 3 4 5 6 7 8 9 10 11 | private void Form1_Load(object sender, EventArgs e) { string sql = "SELECT *FROM Ogrenci"; OleDbConnection con=new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=dbOkul.accdb"); OleDbDataAdapter da = new OleDbDataAdapter(sql, con); DataTable dt = new DataTable(); da.Fill(dt); dataGridView1.DataSource = dt; } |
Şimdide Textbox_TextChanged olayı içinde arama işlemini gerçekleştirelim. Burada büyük/küçük harf duyarlılığına takılmamak için ToUpper metodunu kullandığımızı belirtelim.(ToLower metodu da kullanılabilirdi.) Arama yapılacak textBox üzerinde çift tıklanarak bu bölüme ulaşabilirsiniz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | private void textBox1_TextChanged(object sender, EventArgs e) { string aranan = textBox1.Text.Trim().ToUpper(); 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() == aranan) { cell.Style.BackColor = Color.DarkTurquoise; break; } } } } } } |
Kodlarımızı tamamlamış olduk. Ekran çıktısına bakalım.
selamunaleykum ustam 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;
} }
Hocam aslında benim sorum reportViewer hakkında olucaktı en uygun başlık olarakda bu formu seçtim.Soruma dönersek.Stok takip otomasyonu yapıyorum birden fazla tablom var ve bu tabloları tek form içersindeki tekreportViewer ile halletmek istiyorum.Bu mümkünmü münkünse yardımcı olurmusnuz.Bu cmbobox datagrid de calısıyor tek formda combobox ile bircok formu acabiliyorum ama bunu reportViewer a nasıl onaylarım yardımlarınız için simdiden saolun.
selamun aleykum. Bi forma report view yerlestir. Sonra bitane report wizard olustururken datasetine cagiracagin formlari secmeni isteyecek tum formlari sec. Umarim budur istedigin
if (cell.Value.ToString().ToUpper() == aranan)
{
// sadece buldukları datagiridview de görünsün diğerleri görünmesin. Nasıl yaparım.
break;
}
Merhaba. Örneğinizi inceledim. Gayet başarılı. Datagridview değil de TABLE kullanılan ve access değilde sqldeki bir tablodan verileri listeleyen bir sayfa çalışması yaptım. ancak sqlden gelen verileri bir türlü tabloda gösteremedim. Sürekli tanımladığım hata mesajı geliyor “KAYIT BULUNAMADI”. Siz de bu şekilde bir örnek yapar mısınız?
ASP.NET mi Windows Form uygulaması olarak mı yapmaya çalışıyorsunuz?
asp.net ile yapıyorum. gridview ile yaptığımda sorun yaşamadım sorun yok ama onun şekillendirmesini pek beceremedim görsel olarak. sizin gridviewlar daha güzel görünüyor ama yapamayınca table ile yapmaya çalıştım.
merhaba ahmet bey bi sorunum var
DataGridView içinde sizin yaptıgınız gibi oluyor aramalar ama ben sutunlarda aynı değerden 2 yada daha fazla değer olduğunda her aramada birini bulmak istiyorum bu konuda yardım ederseni sevinirim
Sonraki kaydi bul mantiginda birseymi olacak
evet ahmet bey farklı değerlerde sıkıntı yok ama aynı deger varsa önce ilk kaydı sonrada sonra ki aramada ikinci kaydı bulacak
Merhaba ben de denedim ama GridViewCell hata veriyor. Yardımcı olur musunuz.
Nasıl bir hata veriyor?
örnek verilen kodları 3500 adet veri olan datagribde denedim kilitleniyor küçük işlemlerde sorun yok ama iş büyüdüğünde bellek ile ilgili sıkıntı çıkıyor sanırım.
Merhaba . Dediğiniz gibi olabilir. O kadar fazla kayıtla denememiştim hiç. Belki kodlarda birkaç iyileştirme yapılabilir.Foreach döngüsü yerine for döngüsü kullanarak yaparsanız biraz daha hızlanacaktır. Bir ara bende denemesini yaparım.