none
class üzerinden datagrid güncelleme RRS feed

  • Soru

  • void TabloGuncelle()
            {
                for (int j = 0; j < tablo.Rows.Count; j++)
                {
                    string username = tablo.Rows[j].Cells[1].Value.ToString();
                    int id = Convert.ToInt32(tablo.Rows[j].Cells[0].Value.ToString());
    
                    Database eskiHesap = new Database();
                    eskiHesap = id;
                    Database yeniHesap = new Database();
                    yeniHesap.User = username;
                    classcagir.HesapGuncelle(eskiHesap, yeniHesap);
    
                }
            }
    public void HesapGuncelle(Database eskiHesap, Database yeniHesap)
            {
                baglan.Open();
                cmd.Connection = baglan;
                cmd.CommandText = "update instagram set instagram_user='" + yeniHesap.User + "',instagram_mail='" + yeniHesap.Mail + "',instagram_password='" + yeniHesap.Password + "',instagram_group='" + yeniHesap.Group + "' where instagram_id=" + eskiHesap.Id + "";
                cmd.ExecuteNonQuery();
                baglan.Close();
            }
    
    

    Herkese merhaba. Yukarıdaki örnekteki gibi bir yapım var. Tek hesap güncellerken id ye göre güncelleyebiliyorum. Ama datagrid üzerindeki herşeyi değiştirip en son for döngüsü ile güncellemeye çalıştığımda hatayla karşılaşıyorum. Kod yapım yukarıdaki gibi. Classta idye göre güncelle yapıyor. int id çekiyorum 0. satırdan ama bunu classa atamıyorum. Farklı bir yöntem veya başka bir çözüm yolu bilen varmı ? (not resim yüklenmiyor kodları yapıştırdım bende.)


    5 Ekim 2018 Cuma 11:21

Yanıtlar

  • Bakın ,

    1-Veritabanı bağlantısında parametre kulanmıyorsunuz bu hem güvenlik açığı yaratıyor hemde hataya karşı kırılganlık.

    2-Tablo nesnesi sanırım datagrid , datagrid için bir binding source yada en azından bir observable nesne kullanmıyorsunuz satırlar üstünde dolaşıyorsunuz bu hem kodunuzun anlaşılmasını zorlaştırıyor hemde çok yanlış.Bu nesnelerin işi veriyi sadece göstermek bu kadar.

    Yani tam olarak ne yapmak istediğinizi söyleseniz belki daha kolay olur.Mesele datagrid güncellemek ise binding source konusunu araştırmanızı öneririm yada observable nesneleri , sizin arka plandaki verileriniz değiştikçe datagride otomatik yansımalı yoksa bu şekilde kod tarafından dizayn tarafına müdahale etmek çok yanlış.Hemde sizin için ekstra yorucu.

    Örnek ; 

     public BindingList<string> liste = new BindingList<string>();
            
            
            public Form1()
            {
                InitializeComponent();
                
               
                dataGridView1.DataSource = liste;
                
               
    
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                liste.Add("m1");
                
            }

    Sizin listede yaptığınız değişiklik datagride yansıyor , bu şekilde / buna benzer bir tasarım yaparsanız en azından liste üzerinde sorgu(linq) vs kullanabilirsiniz.

    Tabi bu söylediklerim en iyi yol mu hayır sanmıyorum , benim bilgim bu kadar :) 

    5 Ekim 2018 Cuma 11:46

Tüm Yanıtlar

  • Bakın ,

    1-Veritabanı bağlantısında parametre kulanmıyorsunuz bu hem güvenlik açığı yaratıyor hemde hataya karşı kırılganlık.

    2-Tablo nesnesi sanırım datagrid , datagrid için bir binding source yada en azından bir observable nesne kullanmıyorsunuz satırlar üstünde dolaşıyorsunuz bu hem kodunuzun anlaşılmasını zorlaştırıyor hemde çok yanlış.Bu nesnelerin işi veriyi sadece göstermek bu kadar.

    Yani tam olarak ne yapmak istediğinizi söyleseniz belki daha kolay olur.Mesele datagrid güncellemek ise binding source konusunu araştırmanızı öneririm yada observable nesneleri , sizin arka plandaki verileriniz değiştikçe datagride otomatik yansımalı yoksa bu şekilde kod tarafından dizayn tarafına müdahale etmek çok yanlış.Hemde sizin için ekstra yorucu.

    Örnek ; 

     public BindingList<string> liste = new BindingList<string>();
            
            
            public Form1()
            {
                InitializeComponent();
                
               
                dataGridView1.DataSource = liste;
                
               
    
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                liste.Add("m1");
                
            }

    Sizin listede yaptığınız değişiklik datagride yansıyor , bu şekilde / buna benzer bir tasarım yaparsanız en azından liste üzerinde sorgu(linq) vs kullanabilirsiniz.

    Tabi bu söylediklerim en iyi yol mu hayır sanmıyorum , benim bilgim bu kadar :) 

    5 Ekim 2018 Cuma 11:46
  • Bakın ,

    1-Veritabanı bağlantısında parametre kulanmıyorsunuz bu hem güvenlik açığı yaratıyor hemde hataya karşı kırılganlık.

    2-Tablo nesnesi sanırım datagrid , datagrid için bir binding source yada en azından bir observable nesne kullanmıyorsunuz satırlar üstünde dolaşıyorsunuz bu hem kodunuzun anlaşılmasını zorlaştırıyor hemde çok yanlış.Bu nesnelerin işi veriyi sadece göstermek bu kadar.

    Yani tam olarak ne yapmak istediğinizi söyleseniz belki daha kolay olur.Mesele datagrid güncellemek ise binding source konusunu araştırmanızı öneririm yada observable nesneleri , sizin arka plandaki verileriniz değiştikçe datagride otomatik yansımalı yoksa bu şekilde kod tarafından dizayn tarafına müdahale etmek çok yanlış.Hemde sizin için ekstra yorucu.

    Örnek ; 

     public BindingList<string> liste = new BindingList<string>();
            
            
            public Form1()
            {
                InitializeComponent();
                
               
                dataGridView1.DataSource = liste;
                
               
    
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                liste.Add("m1");
                
            }

    Sizin listede yaptığınız değişiklik datagride yansıyor , bu şekilde / buna benzer bir tasarım yaparsanız en azından liste üzerinde sorgu(linq) vs kullanabilirsiniz.

    Tabi bu söylediklerim en iyi yol mu hayır sanmıyorum , benim bilgim bu kadar :) 


    değerli yorumunuz için teşekkür ederim. daha işin başındayım ve kod kalabalığından kurtulmak için class mantığını öğrenmeye çalışıyorum. o yüzden çok karışmış olabilir. Verdiğiniz örneği inceledim uygulamam üzerinde deneyeceğim. Yapmak istediğim aslında basitti. Datagridview veritabanını yansıtıyorum. Gelen veritabanı üzerinden değişiklik yapıyorum. Değişiklik yaparken güncellemek istemedim. Tüm değişiklikleri yaptıktan sonra. En son yani. Yapılan tüm değişimleri veritabanına göndermek (güncellemek) ti amacım. 
    5 Ekim 2018 Cuma 15:17