C# DataGridView Kullanımı Ve Özelleştirme

Merhaba arkadaşlar, C# dili ile geliştirilen projelerde benim en çok kullandığım, verileri göstermek için benim en uygun bulduğum yapı olan DataGridView’in kullanımını göstereceğim.

Öncelikle DataGridView’in üstüne tıklayıp properties kısmından BackgroundColor özelliğinden yararlanarak arka plan rengini isteğimize göre ayarlayalım, default olarak gri geliyor ben beyaz kullanıyorum.

Şimdi RowHeadersVisible özelliğini False yapıyoruz.

AutoSizeColumnsMode özelliğini Fill yaparak verilerin DataGridView’in tümünü doldurmasını sağlıyoruz

AutoSizeRowsMode özelliğini AllCellsExcpectHeaders yapıyoruz böylece başlık boyuna göre veriler düzenli bir şekilde görünüyor.

SelectionMode özelliğini FullRowSelect yaparak bütün satırın seçili hale gelmesini sağlıyoruz

RowsDefaultCellStyle özelliğine girip satırların boyutlarını rengini ve Alignmetn(Yazının orta veya sola yaslı şekilde olması) özelliğini isteğimize göre değiştiriyoruz.

Şimdi sırada kod kısmı var, ben gridAyar() şeklinde bir fonksiyon yazmayı tercih ediyorum

void gridAyari()
         {
             dataGridView1.ReadOnly = true; // sadece okunabilir olması yani veri düzenleme kapalı
             dataGridView1.AllowUserToDeleteRows = false; // satırların silinmesi engelleniyor
             dataGridView1.ColumnCount = 3; //Kaç kolon olacağı belirleniyor…
             dataGridView1.Columns[0].Name = "Kolon1";//Kolonların adı belirleniyor
             dataGridView1.Columns[1].Name = "Kolon 2";
             dataGridView1.Columns[2].Name = "Kolon 3";
             dataGridView1.Columns[1].Width = 100; //belirlenen kolonların genişliği ayarlanıyor
             dataGridView1.Columns[2].Width = 100;           
         }

DataGridView’e veri ekleme işlemi ise çok basit bir şekilde, kaç adet kolon belirlediysek o kadar virgül koyarak ekleme işlemini yapıyoruz;

DataGridin son hali şu şekilde oluyor.

 dataGridView1.Rows.Add("1","2","3");

DataGridView’in sütunlarından birine resim ekleme işlemi için:

DataGridViewImageColumn btnIptal = new DataGridViewImageColumn();
             btnIptal.Image = Deneme.Properties.Resources.carpi25;
             btnIptal.HeaderText = "İptal";
             dataGridView1.Columns.Add(btnIptal);
             dataGridView1.Columns[4].Width = 50;

şeklinde ekleme yapıyoruz. Resource kısmına eklediğin fotoğraf sayesinde resim eklenmiş oluıyor

Son olarak eklemiş olduğumuz sil butonuna tıklanma olayını yapalım Bunun için DataGridin properties kısmından events bölümünü açıp CellClick özelliğine çift tıklamamız gerekiyor böylece tıklandığında çalışacak olan fonksiyon otomatik olarak oluşturulmuş olacak

        private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {

        }

Şimdi hangi kolonun seçildiğini bulup işlem yaptıralım bunun için şu kodu yazmamız gerekiyor

        private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            if (dataGridView1.RowCount > 0)
            {
                if (e.ColumnIndex == 4)
                {
                   //işlemler buraya
                }
            }
        }

e.ColumnInex == 4 kısmı kaçıncı kolona tıklandığında olmasını istediğiniz şey demek. O kolonda ki bilgileri almak içinse şu kodu yazmanız yeterli

string s= dataGridView2.CurrentRow.Cells[0].Value; // 0,1,2,3 diye değiştirilerek istenilen kolon alınabilir.

Takıldığınız yerleri sorabilirsiniz. Kolay gelsin…

30 Comments

  1. Mehmet bey merhaba.
    Ben datagridView fonksiyonunda texbox tan bilgi aktaracağım ancak ilk sütuna otomatik sıralı sayı vermek istiyorum ayrıca aradan örneğin 10 adet satıra bilgi girdim ve 5 inciyi sildiğim de kalanları tekrardan 1 den 10 a kadar sıralaması gerekiyor mümkünmü?
    Birde bunları database değildi bir dosyaya aktarıp lazım olduğunda tekrar alacağım dosya tipi ne olabilir txt ve benzerlerini istemiyorum

    1. Merhaba,
      Evet bu bahsettiğiniz şey mümkün. Öncelikle dosya aktarmadan başlayayım, dosya işlemlerinde txt formatını kullanmak istemiyorsanız excel dosya formatını kullanabilirsiniz. Veya Access ile çalışabilirsiniz.
      Sıra numarasını da şu şekilde yapabilirsiniz, örneğin dataları bir şekilde okudunuz dataList adında bir objeninin içinde olduğunu düşünelim datalarınızı.

      for(int i =0;i< dataList.count ; i++){ dataGridView1.Rows.Add(i+1,dataList[i].data1,dataList[i].data2); }

      şeklinde doldurabilirsiniz. Bunu yapmadan önce yukarıda verdiğim örnekteki gibi gridAyarı adında bir fonksiyon oluşturmanız gerekiyor, böylece kaç adet sütun olacağını, sütunların boyutlarını, isimlerini vs. belirleyebilirsiniz.
      Silinme olayında örneğin 4. sırada bulunan veriyi sildik, getData adında bir fonksiyon yazıp, datagrid'i doldurabilir ve silme işleminden sonra bu fonksiyonu bir daha çağırabilirsiniz, böylece sıra kaldığı yerden devam eder, 4. sırada bulunan veri silinse bile datayı tekrardan çekeceğiniz için 5. sırada bulunan data silinen datanın yerine geçer ve 4. sıra olur.

      getData(...){
      .....
      for(int i = 0;i < dataList.count; i++){ dataGridView1.Rows.Add(i+1, dataList[i].data1, dataList[i].data2); } }

      Umarım açıklayıcı olmuştur. İyi çalışmalar

      1. Ben, data grid view’ de seçilen bir şeyin bazı sütunlarındaki verileri list box’ a aktarmak istiyorum. Onu nasıl yapabilirim?

  2. Merhaba Öncelikle Kolay Gelsin Size Bir Sorum var Cevaplarsanız Sevinirim

    C# Devexpres DataGridWiev Liste Cektim Ama En alta Manuel Bir Satır Ekledim
    listenin Kendi Özeliği Olan Kolona Tıklayınca Alfabetik Sıralamaya Giriyor Satırlar Haliyle Manuel Eklediğim Satırında Yeri Değişiyor
    Ben Bu Satırın Her zaman En alta Sabit Kalabilmesi için Nasıl Bir yol izleyebilirim Yardımcı Olursanız Çok sevinirim

  3. Hocam merhaba.
    DataGridView e arraylist türünden veri ekliyorum ama ikinci veriyi eklediğim zaman ilk ekledeğim veri siliniyor. Ben iki verininde aynı anda görünmesini istiyorum ne yapmalıyım.
    Kullandığım kod parçası bu
    dataGridView1.DataSource = urn.UrunAra(Convert.ToInt32(textBox1.Text));
    Cevap verebilirseniz sevinirim 🙂

    1. Merhaba Ahmet,
      Verilerin silinmesinin sebebi dataSource’nin her arama sonucu o anki veriye eşitlenmesi. Bu durumda istediğin dataları bir list veya array içerisinde tutarak çözebilirsin.
      Örnek olarak şöyle bir kod bloğu yazabiliriz;
      List urunList = new List();
      urunList.Add(urn.UrunAra(Convert.ToInt32(textBox1.Text)));
      urunList.Add(urn.UrunAra(Convert.ToInt32(textBox2.Text)));
      *****
      şuan urunList adlı listimizin içinde iki adet data bulunuyor ve
      dataGridView1.DataSource = urunList;
      şeklinde yaparak iki datayı datagrid içine basabiliriz.
      Kendi kodunu şu şekilde revize edebilirsin;
      Her arama sonucu elde ettiğin datayı global olarak oluştuırmuş olduğun list içine atabilir ve arama sonucu o ekleme yaptığın list’i datagridin Datasourcune eşitleyebilirsin.
      İyi kodlamalar.

  4. Merhaba ben DataGridView e RadioButtondan seçilen öğeyi ilgili sütuna eklemek istiyorum ama nasıl yapacağımı bilmiyorum. Tek tek eklediğimde hata veriyor radio buttonları.

  5. Merhaba ben datagridview le uğraşmadan direkt
    Örneğin sehirler tablomdaki 06 id li Ankara ilini textboxa yazdırmak istiyorum bunu nasıl yapabilirim?

  6. Merhaba. Bilgi için teşekkürler. Sorum; DataGridView kayıtlarda en yeni kaydı en üstte nasıl gösterebiliriz. Teşekkürler.

    1. Merhaba, Verilerli veri tabanından çekiyorsanız; Id veya eklenme tarihine göre order by çekerek yapabilirsiniz.
      Veriler herhangi bir yere yazılmadan direkt olarak dataGridView’e ekleniyorsa; DatagridView sort diye araştırma yapabilirsiniz. Aşağıda örnek kod paylaşıyorum;
      dgView.Sort(dgView.Columns[0],ListSortDirection.Ascending);
      Teşekkürler iyi kodlamalar.

  7. Cevap için çok teşekkürler, Hocam size bir sorum daha olacak ya,
    personel, tarih, giriş saati, çıkış saati olarak verilerimiz var, giriş butonuna tıklayınca o anki tarih saati yazdırıyoruz, çıkış butonuna tıklayınca da aynısı ama DataGridVİew de aynı satırda çıkış hücresine nasıl yazdırabiliriz,
    NOT: visual basic ve sql ile yapıyoruz.

      1. Şöyle ki,
        Veri tabanında personel, tarih, giriş saati, çıkış saati alanları var,
        Giriş Yap butonuna basınca o anki tarihi _tarih saati de _giriş saati alanına kaydediyor
        Çıkış Yap butonuna basınca da kaydedilen tarih ve giriş saati satırında çıkış saati alanına kaydetmesini istiyorum, görsel koyabilsem daha iyi olacaktı.

  8. Merhaba dataGridView’e bir veri eklediğim zaman veri en üst satıra ekleniyor. bunu en alt satıra eklemenin bir formülü var mı yetiştirmem gereken bir projem var da lütfen bi yardım edebilirseniz çok sevinirim.

    1. Merhaba,
      Bu işlem için DataGridView sort özelliğini kullanabilirsiniz. Eklediğiniz verinin Id veya eklenme tarihine göre sort edebilirsiniz.
      Örneğin : Column 1 için Id veya Date bilgisi var. Bu bilgilere göre desc olarak sıralanması ->
      dataGridView1.Sort(dataGridView1.Columns[1], ListSortDirection.Descending);

  9. Merhaba datagridview de en fazla 65535 fillweight olabilir hatası alıyorum amacım binlerce sütundan oluşan excelimin matematik işlemlerini yaptırmak colomları tanımlarken otomatik olarak 100 weightte tanımlanıyor 0.0001f olarak tanımlasakta 5000 tane colomn elde etmenin bir yolu var mı

  10. merhabalar ben telefon rehberi yapcam ama sql kullanmadan yapmam gerkiyor yardımcı olur musunuz gerekirse parasıyla

  11. merhaba.
    datagridview de sayısal alanları sağa dayalı yazdırmak istiyorum, bir yöntemi var mı?

    1.100
    12.120
    123.123 şeklinde görünüyor

    1.000
    12.120
    123.123 bu şekilde sayı gibi görünmesini istiyorum.

    teşekkürler.

  12. Merhaba datagrindview özellikler kısmına ulaşamıyrum . başka foksiyonlarda açılan özallikler penceresi datagrindwiev de açılmıyor . başka bir form açtıgım zaman özellikler bölümü acılıyor , sadece mevcut programımda datagrindviev in özellikler kısmına erişemiyorum . Sorunu anlatabilmişimdir umarım cevabınızı bekliyorum .

  13. Merhaba.
    ben datagridview de access sorugda problem yaşıyorum.
    3 sütünda ondalık basamak verdim. bu değerler biraz yüksek sanırım.
    bu nedenlede sorguyu datagridview de göstermeye çalışınca bana

    Sağlayıcı Double değerini belirleyemedi. Örneğin, satır yeni oluşturulmuştu, Double sütununun kullanılabilir varsayılan değeri yoktu veya tüketici henüz yeni bir Double değeri ayarlamamıştı.”

    hatasını veriyor. bu sorunu nasıl çözerim

Mehmet için bir yanıt yazın Yanıtı iptal et

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir