none
Datagridview Üzerindeki Veriyi DB'e Kaydetme ve Listeleme RRS feed

  • Soru

  • Merhaba arkadaşlar,

    Sorunumu şöyle anlatayım; programda bir tab'da bir ürünün kaydını gerçekleştiriyorum. Daha sonra ikinci bir tab'da bu ürün ile ilgili bilgileri girmek istiyorum. 

    Yalnız girerken bu bilgileri direk datagridview üzerinden girip "Kaydet" butonuna bastığım zaman access database' kaydedecek şekilde ayarladım. Buraya kadar bir sorun yoktu. Datagridview üzerinden istediğim kadar satır oluşturuyor, bu satırları yazıp kaydedebiliyorum. 

    Sorun bir ürünün içerisindeki bilgileri listelemek istediğim zaman karşıma çıkıyor. Listeleme işlemini yaptığım zaman bir ürünü çağırdığımda, ürünün detayları geliyor listeliyorum ancak; datagridview üzerinde listelenen bölüme bu sefer yazdığım açıklamalar kaydedilmiyor. Datagridview'deki sütunları birbirine bağlayınca bu şekilde işler karıştı anlayacağız. 

    Örnek fotoğraf:

    Kodlar:

          private void button21_Click(object sender, EventArgs e)
            {
                for (int i = 0; i < TanimlamaList.Rows.Count - 1; i++ )
                {
                    baglanti.Open();
                    OleDbCommand tanimhekle = new OleDbCommand("insert into Tanimlama (Tanim,Rapor_No) values ('" + TanimlamaList.Rows[i].Cells[1].Value + "', '" + txt_tanimlamarapno.Text.ToString()+ "')", baglanti);
                    tanimhekle.ExecuteNonQuery();
                    baglanti.Close();
                }
                MessageBox.Show("Kayıt Tamamlandı!", "Başarılı", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
            }
    
            private void btn_getir_Click(object sender, EventArgs e)
            {
                txt_tanimlamarapno.Text = txt_getirno.Text;
                ds.Clear();
                tanimlamalistele();
            }
    
            void tanimlamalistele()
            {
                baglanti.Open();
                OleDbDataAdapter tanlist = new OleDbDataAdapter("Select *From Tanimlama where Rapor_No like '%" + txt_getirno.Text + "%'", baglanti);
                tanlist.Fill(ds, "Tanimlama");
                TanimlamaList.DataSource = ds.Tables["Tanimlama"];
                adtr.Dispose();
                TanimlamaList.Columns["Sira_No"].Visible = false;
                TanimlamaList.Columns["Rapor_No"].Visible = false;
                TanimlamaList.Columns["Rapor_id"].Visible = false;
                baglanti.Close();
            }
    
            private void TanimlamaList_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)
            {
                this.TanimlamaList.Rows[e.RowIndex].Cells["Sira"].Value = (e.RowIndex + 1).ToString();
            }

    İkisini ayrı sütunlarda gerçekleştirsem ikiside ayrı ayrı gerçekleşiyor ama o zamanda 3 satır açıklama yazılmışsa ister istemez 4.satırdan başlıyor kayıt işlemi ve kaydet butonuna basınca 3 tane boş satır ve dolu olan 4. satırı kaydediyor. 

    Ama tabi mümkün ise tek sütun çok daha iyi olacaktır. 

    8 Kasım 2018 Perşembe 11:34

Tüm Yanıtlar

  • Şu konuya göz atarmısınız.

    Veritabanı bağlantılarınızda hatalar var ; 

    1-for içerisinde open close yapmak iyi değil.

    2-datatable vs gibi ağır hantal nesneler kullanmak iyi değil.

    3-Access kullanmak hiç iyi değil.

    Sizi eleştirmek için söylemiyorum yanlış anlamayın , sadece bu şekilde bir kod yapısı ve bilhassa access başınızı çok ağrıtır.

    8 Kasım 2018 Perşembe 19:12
  • Merhaba, 

    Öncelikle ilginiz için çok teşekkür ederim. 

    Access konusunda haklısınız, yakın zamanda sql'e geçiş sağlayacağım. Şu dönemde kafamdaki bir projeyi tasarlamaya çalışarak hem öğrenme ve hem de kendimi geliştirme niyetindeyim. 

    Bu tarz bir ekleme ve listeleme için datatable yerine ne kullanmamı önerirsiniz? 

    8 Kasım 2018 Perşembe 21:19
  • Collections(Ienumarable,list,observablecol ...vs) kullanın,  ve bu kullanacağınız collection sizin tablonuzun karşılığı olan sınıf türünden nesneler alabilsin.

    Ya bu anlattığım aslında entity framework'ün taş devri versiyonu , oda sizin tablolarınızın karşılığı bir sınıf oluşturup üzerinden işlem yapıyor.

    Ayrıca madem başlamıyorsunuz , hazırlanıyorsunuz.WPF araştırın hiç winform ile vakit kaybetmeyin.

    9 Kasım 2018 Cuma 10:35
  • Merhaba, 

    Öncelikle ilginiz için çok teşekkür ederim. 

    Access konusunda haklısınız, yakın zamanda sql'e geçiş sağlayacağım. Şu dönemde kafamdaki bir projeyi tasarlamaya çalışarak hem öğrenme ve hem de kendimi geliştirme niyetindeyim. 

    Bu tarz bir ekleme ve listeleme için datatable yerine ne kullanmamı önerirsiniz? 

    Öğrenecekseniz... Amacınız nedir?  Hobi mi? O zaman devam edin böyle. Bunu kariyer olarak görüyorsanız o zaman bırakın bu 10-15 yıllık yöntemleri. Güncel yazılım geliştirme metodolojilerini öğrenin. CI/CD, Containers, Continuous testing, Serverless ...

    www.cihanyakar.com

    9 Kasım 2018 Cuma 12:07
  • Söylediğiniz gibi WPF'yide araştıracağım. Ben bir programcı değilim o yüzden en günceli nedir, en uygun hangisinde olur şeklinde olaya yaklaşmadım. Şuan çalışmakta olduğum işi geliştirmek adına yapmak istediğim bir uygulama var. Uygulamanın temeli birbirine bağlı veritabanları, bu veritabanları veri ekleme ve veri çekmek. 

    Ek olarak bu verilerden uygun tasarımlarda rapor çıktıları alabilmek, ve bazı noktalarda yaklaşan durumlarda hatırlatma notları çıkartabilmek. 

    Amacım tamamen mükemmel bir program yapıp, piyasaya sürüp bu programı satmak değil. O yüzden şuan için benim işimi görecek kendime yetecek bir program olması benim için daha uygun diye düşündüm. Bu sebepten en yakın ulaşabildiğim ve hakkında en çok içeriği bulabildiğim alandan çalışmaya başladım. 

    Teşekkür ederim.

    10 Kasım 2018 Cumartesi 15:33
  • Söylediğiniz gibi WPF'yide araştıracağım. Ben bir programcı değilim o yüzden en günceli nedir, en uygun hangisinde olur şeklinde olaya yaklaşmadım. Şuan çalışmakta olduğum işi geliştirmek adına yapmak istediğim bir uygulama var. Uygulamanın temeli birbirine bağlı veritabanları, bu veritabanları veri ekleme ve veri çekmek. 

    Ek olarak bu verilerden uygun tasarımlarda rapor çıktıları alabilmek, ve bazı noktalarda yaklaşan durumlarda hatırlatma notları çıkartabilmek. 

    Amacım tamamen mükemmel bir program yapıp, piyasaya sürüp bu programı satmak değil. O yüzden şuan için benim işimi görecek kendime yetecek bir program olması benim için daha uygun diye düşündüm. Bu sebepten en yakın ulaşabildiğim ve hakkında en çok içeriği bulabildiğim alandan çalışmaya başladım. 

    Teşekkür ederim.

    10 Kasım 2018 Cumartesi 15:33