En iyi yanıtlayıcılar
class üzerinden datagrid güncelleme

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.)
- Düzenleyen Mustafa Torlak 5 Ekim 2018 Cuma 11:23
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 :)
- Yanıt Olarak Öneren Önay YALÇINERModerator 5 Ekim 2018 Cuma 13:02
- Yanıt Olarak İşaretleyen Kyamuran SalibryamMicrosoft contingent staff, Moderator 23 Ekim 2018 Salı 10:57
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 :)
- Yanıt Olarak Öneren Önay YALÇINERModerator 5 Ekim 2018 Cuma 13:02
- Yanıt Olarak İşaretleyen Kyamuran SalibryamMicrosoft contingent staff, Moderator 23 Ekim 2018 Salı 10:57
-
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.