datagridviewde tekrar eden verileri teke düşürme

268 views
Skip to first unread message

samet.ka...@gmail.com

unread,
Sep 11, 2018, 1:19:34 AM9/11/18
to C SHARP UYGULAMALAR FORUM
hocam merhaba;

Datagirdviewde A kolonundaki satırlarda tekrar eden yani aynı değere sahip olan verileri teke düşürerek baska bir datagride aktarıp kaç kez tekrar ettiğini saydırıp diğer datagrideki verinin karşısına nasıl aktarabiliriz. Daha net olarak anlatmak gerekirse A kolonunda yüzlerce satır veri olduğunu düşünün, bu satırlarda bir çok farklı ismin tekrar ettiğini varsayalım örneğin Ahmet isminden 50 tane mehmet isminden 60 tane Rıza isminden 40 tane ve daha bir çok farklı isimden tekrar eden veri olduğunu düşünürsek nasıl bir döngü ile A kolunundaki bu isimleri teke düşürüp başka bir datagride aktarabiliriz ve her isimden kaç kere tekrar ettiğini teke düşürdüğüz isimlerin karşısına yazdırabiliriz.

c sharp uygulamalar

unread,
Sep 16, 2018, 10:54:45 AM9/16/18
to C SHARP UYGULAMALAR FORUM

Aşağıdaki gibi yapabilirsin. ilk önce kolon 1 deki tekrarlayanları bulup sözlüğe yerleştiriyor. Aynı zamanda sayısını da value olarak tutuyor. İşlem bittikten sonra 2. datagridview a foreach ile bulduğu tekil değişkenleri ve adedini dolduruyor.


Dictionary<string, int> tekrarlayanSayisi = new Dictionary<string, int>();
        private void buttonSınıflandır_Click(object sender, EventArgs e)
        {
            for (int i = 0; i < dataGridView1.Rows.Count; i++)
            {
                if (tekrarlayanSayisi.ContainsKey(dataGridView1[0, i].Value.ToString()))
                {
                    tekrarlayanSayisi[dataGridView1[0, i].Value.ToString()] = int.Parse(tekrarlayanSayisi[dataGridView1[0, i].Value.ToString()].ToString()) + 1;
                }
                else
                {
                    tekrarlayanSayisi.Add(dataGridView1[0,i].Value.ToString(), 1);
                }
            }

            int satir = 0;
            dataGridView2.Rows.Clear();
            foreach (KeyValuePair<string, int> item in tekrarlayanSayisi )
        {
                dataGridView2.Rows.Add();
                dataGridView2[0, satir].Value = item.Key;
                dataGridView2[1, satir].Value = item.Value;
                satir++;
            }
        }


c sharp uygulamalar

unread,
Sep 16, 2018, 10:56:09 AM9/16/18
to C SHARP UYGULAMALAR FORUM
Ayrıca bu işlem bir çok yöntem ile yapılabilir. Dizi kullanarak yapabilirsin. 2 li dizi kullanarak yapabilirsin. generic list kullanarak yapabilirsin. Ben burada dictionary kullandım.

samet.ka...@gmail.com

unread,
Sep 16, 2018, 3:12:11 PM9/16/18
to C SHARP UYGULAMALAR FORUM
Hocam çok teşekkürederim Allah (cc) sizden Razı olsun. Müsadenizle iki sorum daha olacak.

1.Sorum ;

Formda 2 tane datagridviewim var dgv1 ve dgv2. dgv1'in 1. kolonunda siciller var ve karşısındaki 3.5.7. kolonlarda ise 1. kolondaki sicillere ait veriler var. dgv2 deki A kolonundaki siciller ile dgv1 deki A Kolonundaki sicilleri karşılaştırıp dgv2 deki siciller dgv1 deki sicillere eşit ise dgv2 de yeralan 2.3.4. kolondaki verileri dgv1 deki 2.4. ve 6. kolonlara nasıl aktarabilirim.

2.Sorum ;

dgv2 de örnek veriyorum A kolonunda 600 personele ait sicil var ve toplam personel sayımız da 600. Dgv1 de ise örnek veriyorum 3000 tane sicil var yani bu 600 sicilin içindeki bazı siciller birden fazla tekrar etmiş.Burada tekrar eden sicillerin karşısındaki B kolonunda yer alan sayısal verileri toplatarak dgv1 deki karşılığını bulup karşısına nasıl yazdırırız.Karıştı sanki biraz. Şöyle anlatayım ; dgv2 de 1.satırdaki sicil toplamda 3 defa tekrar etmiş ve karşısındaki kolondaki verileri sırası ile birincisinde 20 ikinci tekrarda 30 üçüncüsünde 50 değerlerini almış bu sicili dgv1 de bulup karşısına bu üç veriyi toplatıp nasıl yazdırırız.bunu tüm siciller için yapmak istiyorum.

c sharp uygulamalar

unread,
Sep 16, 2018, 4:52:46 PM9/16/18
to C SHARP UYGULAMALAR FORUM
1. sorunu anlayamadım. dgv2 deki veriler dgv1 dekilerin üzerine mi eklenecek yoksa dgv1 deki veriler silinip dgv2 deki değerler mi yazılacak.

2. soru: bence bir nesne oluştur. Bu nesne kolonların özelliklerini barındırsın. sonra bütün datagridview daki datayı bu nesneye çevirerek generic listede sakla. sonra iç içe for döngüsü veya foreach döngüsü ile nesnelerin sicil idlerini kontrol et. sicil nosu aynı olanları birleştir ve birleşenleri sil. bütün satırlar bitince generic listede tekrar etmeyen siciller kalacak. Bunu tekrar gridview da göstermek işlemi kalıyor.

Eğer tablo kolonları ne olduğunu paylaşırsan bir nesne ve generic liste kontrol kodu paylaşabilirim.

samet.ka...@gmail.com

unread,
Sep 16, 2018, 5:10:39 PM9/16/18
to C SHARP UYGULAMALAR FORUM
hocam şöyle resim üzerinde anlatmaya çalıştım resim linkini de ekledim. ben bu anlattıklarımı excel üzeride yapıyorum ama bilgisayar öyle bir kasıyor ki kilitleniyor yüzbin satırın üstünde veri oluyor bazen ve 45 dk beklemek zorunda kalıyorum hesaplamaları yapması için ve birde hata yaptıysam tekrar beklemek zorunda kalıyorum o yüzden program üzerinde çok hızlı oluyor yüzbin satır veriyi datagride aktarmak 10-15 sn sürüyoru ve hesaplamalarda çok kısa sürüyor o yüzden size sürekli soru soruyorum kusuruma bakmayın.

https://i.hizliresim.com/6NL1B9.png

c sharp uygulamalar

unread,
Sep 17, 2018, 12:59:20 PM9/17/18
to C SHARP UYGULAMALAR FORUM

Form uygulamasında aşağıdaki gibi bir işlem yaparak dataları gruplayabilirsin.

Dictionary<string, Ogrenciler> ogrencilerGruplanmis = new Dictionary<string, Ogrenciler>();

        private void btnGruplandir_Click(object sender, EventArgs e)
        {
            for (int i = 0; i < dataGridView1.Rows.Count; i++)
            {
                // sicil 1 nolu kolonda, sicil gruplanmışta var mı kontrol et. Varsa bu satırdaki değerleri olan gruba ekle
                if (ogrencilerGruplanmis.ContainsKey(dataGridView1[1, i].Value.ToString()))
                {
                    Ogrenciler ogrenci = ogrencilerGruplanmis[dataGridView1[1, i].Value.ToString()];

                    ogrenci.DenemeSayisi += int.Parse(dataGridView1[4, i].Value.ToString());
                    ogrenci.YapilanDenemeSayisi += int.Parse(dataGridView1[5, i].Value.ToString());
                    ogrenci.Dogru += int.Parse(dataGridView1[6, i].Value.ToString());
                    ogrenci.Hatali += int.Parse(dataGridView1[7, i].Value.ToString());
                    ogrenci.Yanlis += int.Parse(dataGridView1[8, i].Value.ToString());
                }
                else
                {
                    Ogrenciler ogrenci = new Ogrenciler();

                    ogrenci.SicilNo = int.Parse(dataGridView1[1, i].Value.ToString());
                    ogrenci.Ad = dataGridView1[2, i].Value.ToString();
                    ogrenci.Soyad = dataGridView1[3, i].Value.ToString();
                    ogrenci.DenemeSayisi = int.Parse(dataGridView1[4, i].Value.ToString());
                    ogrenci.YapilanDenemeSayisi = int.Parse(dataGridView1[5, i].Value.ToString());
                    ogrenci.Dogru = int.Parse(dataGridView1[6, i].Value.ToString());
                    ogrenci.Hatali = int.Parse(dataGridView1[7, i].Value.ToString());
                    ogrenci.Yanlis = int.Parse(dataGridView1[8, i].Value.ToString());

                    ogrencilerGruplanmis.Add(ogrenci.SicilNo.ToString(), ogrenci);
                }
            }

            int satir = 0;
            dataGridView2.Rows.Clear();
            foreach (KeyValuePair<string, Ogrenciler> item in ogrencilerGruplanmis)
            {
                dataGridView2.Rows.Add();

                Ogrenciler ogrenci = item.Value;
                dataGridView2[0, satir].Value = satir + 1;
                dataGridView2[1, satir].Value = ogrenci.SicilNo;
                dataGridView2[2, satir].Value = ogrenci.Ad;
                dataGridView2[2, satir].Value = ogrenci.Soyad;
                dataGridView2[2, satir].Value = ogrenci.DenemeSayisi;
                dataGridView2[2, satir].Value = ogrenci.YapilanDenemeSayisi;
                dataGridView2[2, satir].Value = ogrenci.Dogru;
                dataGridView2[2, satir].Value = ogrenci.Hatali;
                dataGridView2[2, satir].Value = ogrenci.Yanlis;
                satir++;
            }
        }

Ogrenciler sınıfınıda namespace içinde formdan sonra eklemeyi unutma !


 public class Ogrenciler
    {
        public int SicilNo { get; set; }
        public string Ad { get; set; }
        public string Soyad { get; set; }
        public int DenemeSayisi { get; set; }
        public int YapilanDenemeSayisi { get; set; }
        public int Dogru { get; set; }
        public int Hatali { get; set; }
        public int Yanlis { get; set; }
    }




samet.ka...@gmail.com

unread,
Sep 18, 2018, 5:17:03 AM9/18/18
to C SHARP UYGULAMALAR FORUM
Hocam ilginiz ve yardımlarınız için çok teşekkür ederim.
Reply all
Reply to author
Forward
0 new messages