Bazı durumlarda veritabanındaki verilerin datagridview üzerinden güncellenmesi veya eklenebilmesi istenebilir. Bu örneğimizde SQL Server da bulunan veritabanımıza bağlantı kurup CommandBuilder nesnesi ile datagridview üzerinden güncelleme işlemini gerçekleştireceğiz.
Öncelikle kullanacağımız veri tabanı ve tablosunu oluşturalım. Veritabanımızın ismi “sirket” tablomuzun adı “musteriler” olacak.
Daha sonra C# formumuzu aşağıdaki şekilde oluşturalım.
Formumuzu oluşturduktan sonra kodları yazmaya başlayacağız. Yazacağımız kodları kısaca açıklamamız gerekirse öncelikli olarak Form yüklendiğinde “müşteriler” tablosundaki verilerin datagridview‘ de görüntülenmesini sağlayacağız. “GÜNCELLE” butonuna ise yazacağımız kodlarla ise datagridview üzerinde herhangi bir değişiklik yaptığımızda veya kayıt eklendiğinde bu kayıtların veritabanında güncellenmesini sağlayacağız.
Kodları aşağıdaki şekilde yazıp programı çalıştıralım.
1 2 3 |
using System.Data.SqlClient; |
satırını eklemeyi unutmayalım.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Data.SqlClient; namespace datagridden_guncelleme { public partial class Form1 : Form { public Form1() { InitializeComponent(); } SqlConnection con; SqlDataAdapter da; DataSet ds; SqlCommandBuilder cmdb; private void Form1_Load(object sender, EventArgs e) { con = new SqlConnection("server=.; Initial Catalog=sirket;Integrated Security=SSPI"); con.Open(); da = new SqlDataAdapter("Select * from musteriler", con); cmdb = new SqlCommandBuilder(da); ds=new DataSet(); da.Fill(ds, "musteriler"); dataGridView1.DataSource = ds.Tables[0]; con.Close(); } private void button1_Click(object sender, EventArgs e) { da.Update(ds, "musteriler"); MessageBox.Show("Kayıt güncellendi"); } } } |
2. kayıtta bulunan Ali Er isimli müşterinin Soyadını Erşahin Şehrini de Malatya olarak değiştirelim. Güncelle butonuna bastığımızda;
Kaydın yukarıda görüldüğü gibi değiştiğini göreceksiniz. Dilerseniz SQL Server üzerinde de kontrolünü yaparak kaydın değiştiğini görüntüleyebilirsiniz.
Merhaba, kodlar yanlızca bir defa işlem yapmamıza olanak tanıyor. Bir alan güncelledikten sonra yeniden bir güncelleme yapabilmek için form ekranına yeniden giriş yapmamız gerekmekte. Bunla ilgili bir açıklama yapabilir misin hocam acaba?
Kodlarda ufak değişiklikler yaptım. Tekrar kontrol edip dener misin?
Merhabalar, Veri tabanından bağımsız olarak Datagridview satırlarında güncelleme nasıl yapılabilir. Örnek textbox’a barkod numarası girildi. Ürün SQL’den çağrıldı ve datagridview ekranına yerleşti, miktar olarak da 1 adet yazıldı. Tekrar textbox’a aynı barkod girildiğinde varolan satırdaki miktarı 1 artırmak. Code:
public partial class DtGridView : Form
{
DataTable dt = new DataTable();
public Form1 frm1;
public DtGridView()
{
InitializeComponent();
}
SqlConnection connect = new SqlConnection(“Data Source = ; Initial Catalog = Deri; User Id = sa;Password = “);
string constr = “Data Source = ; Initial Catalog = Deri; User Id = sa; Password = “;
public DataTable Cek(string bark)
{
SqlConnection con = new SqlConnection(constr);
SqlDataAdapter da = new SqlDataAdapter(“Select Barcode,Birim,Miktar=1 from StokBarcode where Barcode=@Barcode”, con);
da.SelectCommand.Parameters.AddWithValue(“Barcode”, bark);
//DataTable dt = new DataTable();
da.Fill(dt);
return dt;
}
private void btnEkle_Click(object sender, EventArgs e)
{
try
{
if (!string.IsNullOrEmpty(txtBarcodeAra.Text))
{
string barkod = txtBarcodeAra.Text;
dataGridView1.DataSource = Cek(barkod);
if (dataGridView1.DataSource != null)
{
foreach (DataGridViewRow row in dataGridView1.Rows)
{
string brk = row.Cells[“Barcode”].Value.ToString();
if (brk == barkod)
{
double sayac = double.Parse(row.Cells[“Miktar”].Value.ToString()); ;
sayac++;
row.Cells[“Miktar”].Value = sayac;
//dataGridView1[“Miktar”,0].Value = sayac; // “0” DataGridView deki İlk kolon zaten tek kolon bilgi geliyor.
}
}
}
}
else
{
MessageBox.Show(“Boş Geçme”);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
Merhaba Hocam, Kayıt güncellemesi yaptığımda güncelleme işleminden sonra da datagridviewde güncellenen kaydın seçili olmasını istiyorum. Normalde güncellendiğinde ilk satırdaki kayıt seçili hale geliyor. Bunun için ne yapabilirim. Kodları paylaşabilirmisiniz?
Datagride tıkladığınız satirin index numarasini bir degiskene kaydedip guncelleme isleminden sonra ayarlanmasi gerekiyor.
satno = Convert.ToInt32(dataGridView1.CurrentCell.RowIndex); ile indexi aldım ardından
dataGridView1.Rows[satno].Selected = true; ile seçmek istedim fakat sadece satır seçili oluyor, kayıt seçili olmuyor.
Kaydin bulundugu satir secilmiyor mu?
Kaydın bulunduğu satır seçiliyor örneğin 3 nolu kayıt seçili fakat datagridte Kayıt Oku (>) 1.kayıtta duruyor.
Hafta ici bilgisayar basina gectigimde bakabilirim. Sorunu cozerseniz burada paylasirsaniz sevinirim.
TAmam Hocam, Teşekkürler
Sorun çözüldü.
satno = Convert.ToInt32(dataGridView1.CurrentCell.RowIndex); ile satır numarasını aldıktan sonra aşağıdaki kod ile güncelenen kayıt seçimi yapılabilir.
dataGridView1.FirstDisplayedScrollingRowIndex = dataGridView1.Rows[satno].Index;
dataGridView1.CurrentCell = dataGridView1.Rows[satno].Cells[1];
dataGridView1.Rows[satno].Selected = true;
Güncelleme işlemini başka form üzerinden nasıl yapabilirim?
Yani satır seçildiğinde güncellemek için o satır seçtiğim satırı diğer formda doldurup orda değiştirip tekrar kaydetmek istiyorum. Diğer forma gridteki yerlerden oluşan textboxlar yaptım orayı doldurup gridi güncellemek istiyorum.
adresine bakabilirsin. Zannediyorum Master/Detail tipi bir kullanım yapmak istiyorsun
Aşağıdaki linkteki uygulamayı indirip inceleyebilirsiniz.
https://yadi.sk/d/dstQset_3NhrZs
usta ekleme işini nasıl yapacağız.
Bunu sql değil de OleDb ile nasıl yapabilirim?
hocam ben yazıyorum güncellendi de diyor ama databasede değişmiyor yinede
visual studio 2015 de bu projejde güncelle butonun bastığımda
da.Update(ds, “musteriler”);
komutta hata alıyorum. veri tabanı sağlam diğer projem calısıyor ama burda ne sorun olduğunu çözüm bulamadım yardımcı olabilirmisiz
Hata mesajını görmeden bir şey söylemek zor.
Arkadaşlar eğer ki yapamayan olursa bana mail adresimden ulaşabilirsiniz yabancı forumlara bakarak hallettim sorunu datagrid üzerinden güncelleme yapabiliyorum.
mail adresim: mucahit_yilmaz@outlook.com
Kodlari burada paylasarak katkida bulunabilirsiniz.
Hocam şu yorum alanında bi sıkıntı var uzun yazı yapıştırınca yorum gönder butonu kayboluyor footer ın altına giriyor sanırım. O yüzden kodları ve projeyi upload ettim linkler aşağıda. Projenin büyük olmasının sebebi sqlite package olmasıdır.
http://s2.dosya.tc/server2/za2ecv/testDataGridUpdate.zip.html
http://s2.dosya.tc/server2/xhis0y/.Update.SQLite.Database.From.DataGridView.pdf.html
İlgileneceğim. Teşekkürler.
Rica ederim. Kolay gelsin.
Ayrıca önemli bir husus daha var. Veritabanı dosyanızın copy to output directory özelliğini “Copy if never” yapın “Copy always” değil.
private void button1_Click(object sender, EventArgs e)
{
con.Ope();
dt = new DataTable();
cmdb = new SqlCommandBuilder(da);
da.Update(ds, “musteriler”);
MessageBox.Show(“Kayıt güncellendi”);
}
bu kısmı bu şekilde düzenledim ve her seferinde kayıt güncellendi uyarısı veriyor. fakat programı kapattım açtım ve veriler yerinde yoktu yani veritabanına kaydetmiyor.
Merhaba. Herhangi bir sorun olmaması gerekiyor. Veritabanı ismi ve Tablo isminini doğru yazıp yazmadığınızı tekrar kontrol edin.
Yok hocam hepsi doğru veritabanı olarak sqlite kullanıyorum ve dataset yerine datatable kullanıyorum. Bağlantı da sıkıntı olmuyor zaten form1 load olunca veritabanından verileri çekip datagride atıyor ve değişiklik yapıp güncelle deyince olumlu uyarı veriyor ama veritabanına kaydetmiyor. Pc başına geçince uygulamayı upload edebilirim
Bir kere güncellemeden sonra ikinci defa güncelleme yapılamıyor maalesef ki. Sorunu çözdünüz mü acaba ?
teşekkür ediyorum hocam
hocam aynı işlemleri yapınca bende Tutarlılık ihlali: UpdateCommand, beklenen 1 kaydın 0 kaydını etkiledi. hatası alıyorum. tabloda primary key mevcut, ayrıca o sütunu readonly=true yaptım.
neden reaonly (sadece okunabilir) yaptınız.
private void button1_Click(object sender, EventArgs e)
{
ds=new DataSet();
con.Open();
cmdb = new SqlCommandBuilder(da);
da.Update(ds, “musteriler”);
MessageBox.Show(“Kayıt güncellendi”);
con.Cose();
}
birde böyle deneyin.
Hocam Bunu Acces Veritabanı için nasıl yapabilirim. Yardımcı olur musnuz?
https://yadi.sk/d/Iu4tzBchomN9x
buradan indirebilirisiniz.
Access veri tabanı bağlantısı ile ilgili yazılar mevcut sitede. Onlara da göz atabilirsiniz.
Projenizi indirip denedim.
" Dynamic SQL generation for the UpdateCommand is not supported against a SelectCommand that does not return any key column information. "
Güncelle dediğimde bu hatayı veriyor.
Tablonuzda Primary Key alan oluşturdunuz mu?
hocam bir kere tek güncelleme yapıyor ikinci kez yapmaya kalkıştığımda olmuyor, başka sayfaya geçip yeniden yapmam gerekiyor. bunu nasıl düzeltirim
Her hangi bir sıkıntı olmaması gerekiyor. Projeyi indirip göz atın. https://yadi.sk/d/98TYITYQhNq5e (uygun veritabanı oluşturmayı unutmayın)
Sorunu çözdünüz mü acaba ?
Sorununuzla pazartesi ilgilenebilirim.