C# DataGridView’den Veri Çekme, dersimiz ile C# eğitim setimize devam ediyorum. Bu dersi yazmamın en büyük sebebi bu konu hakkında çok soru gelmesidir. Her 3 sorudan birisi bu konu hakkında olduğundan kapsamlı bir yazı yazmayı uygun gördüm. Ancak daha önce windows nesnelerini çok kullanmadım. Devexpress kullanmıyorsanız hemen araştırıp kullanmaya başlamanızı tavsiye ederim.
C# DataGridView’den Veri Çekme
Bu gibi işlemlerde kullanabileceğimiz bir kaç form tasarımı var.
Birincisi, gridview ve textbox’lar aynı form içerisinde yer alır. Gridview sağda yada altta olur. Gridview’e tıkladığımızda veriler alınır ve textbox’lara yazılır.
İkinci, ilk önce gridview ‘in yer aldığı form açılır. Girdview üzerinde satıra çift tık yapıldığında form açılır ve veriler doldurulur ya da gridvew’in olduğu forma bir contextmenustrip koyarız ve girdview’e bağlarız. contextmenustrip’e de Güncelle menüsü ekleriz. Sağtık Güncelle dediğimizde bu işlemler yapılır. Bağlantıya tıkladığınızda ContextMenuStrip kullanımını görebilirsiniz.
Üçüncüsü, form mantıklarını birinci de yada ikinci de olduğu gibi yapabilirsiniz. Gridviewden sadece ID değerini alırsınız. Sonrasında texbox’ların olduğu forma ID değerini göndeririz. Bir datatable ile o aldığımız ID değerine göre verileri çekeriz ve texboxlara verileri aktarırız.
En mantıklı gördüğüm yöntemi bu dersimde anlatacağım. Mantıklı olan durum önce liste formun açılması ve buradan alınan bilgilerle texbox ların olduğu forma aktarma işlemini yapmak olacaktır. O yüzden diğer yöntemleri anlatmayacağım. Benzer şeyler olduğundan diğer yöntemleri sizlerin denemesini isterim.
Bu dersimin içeriğini de Github projemde bulabilirsiniz. Dersin sonunda linki vereceğim.
Bu ders içerisinde
- C# SQL Server Bağlantısı Yapmak
- C# DataGridView’e Veri Çekmek
- C# DataGridView’den Veri Çekmek
- C# DataTable’den Veri Çekmek
- C# Formlar Arası Veri Aktarımı
- C# ContextMenuStirp Kullanımı
Konularını göreceğiz. Bu 5 başlığı da C# Eğitim Seti ‘me ekleyip bu yazıya linkleyeceğim.
Liste Formu
Şimdi DataGridView ‘i ListeFormu adlı formumuza ekliyoruz ve verilerimizi gösteriyoruz. Ek olarak formumuza 1 adet ContextMenuStrip ekliyoruz. Grid üzerinde sağtık yapıp çıkan menü de güncelle dediğimizde veri okuma işlemi yapacağız. Aşağıda Liste formundaki kodları görebilirsiniz.
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 mustafabukulmez_com_dersler._8_Gridview_den_textbox_a_Veri_cekme { public partial class ListeForm : Form { public ListeForm() { InitializeComponent(); } SqlConnection con = new SqlConnection(); SqlDataAdapter da = new SqlDataAdapter(); SqlCommand com = new SqlCommand(); DataSet ds = new DataSet(); void griddoldur() { con = new SqlConnection(@"Server=.\SQL2014;Database=mustafabukulmez;User ID=user; Password=sifre;pooling=true; "); da = new SqlDataAdapter("Select * From PERSONEL_TANIMLARI", con); ds = new DataSet(); con.Open(); da.Fill(ds, "Personel"); dataGridView1.DataSource = ds.Tables["Personel"]; con.Close(); } private void ListeForm_Load(object sender, EventArgs e) { griddoldur(); } int ID = 0; private void dataGridView1_DoubleClick(object sender, EventArgs e) { KaydiGuncelle(); } private void güncelleToolStripMenuItem_Click(object sender, EventArgs e) { KaydiGuncelle(); } void KaydiGuncelle() { // ilk kolon ID kolonu olduğundan ID değerimizi alıyoruz. Burada sadece ID 'yi alacağız. ID = Convert.ToInt32(dataGridView1.CurrentRow.Cells[0].Value.ToString()); //[0] sütun numarası // ID değerini aldıktan sonra diğer forma göndereceğiz ve orada bir datatable üzerinden verileri // alacağız TextBoxForm fr = new TextBoxForm(); fr.Okunan_ID = ID; fr.ShowDialog(); // Güncellemeyi yaptıktan sonra listeyi güncellemek için... // Açılan form kapandığında işlemlere kaldığı yerden devam eder böylece listeyi güncellemiş oluruz. // NOT: Formu ShowDialog() olarak açmak zorundasınız. Yoksa form açıldıktan sonra işleme devam eder // Bu yüzden açılan form kapandıktan sonra güncelleme yapmaz. griddoldur(); } } }
Yukarıdaki kodlarda açıklamalar zaten yazıyor ama ben yine de tekrar edeyim.
Burada ilk olarak formdaki datagridview’e verileri çekiyoruz. Sonrasında DataGridView’in DoubleClick eventi içerisinde DataGridView’deki per_RECno kolonundaki ID değerini alıyoruz public bir değişken ile güncelleme ve kayıt için kullanacağımız forma iletiyoruz.
DataGridView’in DoubleClick eventi ve ContextMenuStip’in Kaydı Güncelle menüsü aynı kodu kullanıyorlar. Bu yüzden ilgili kodları bir void yaptık ve iki event içerisinde de kullandık. Şimdi güncelleme formumuzu görelim
TextBox Formu
Liste Formundan gelen ID bilgisini kullanarak SQL den verileri bir DataTable ‘ye alıyoruz. Sonrasında bu DataTable’deki verileri Textbox’lara alacağız. Şimdi de Textbox_Formu kodlarınızı görelim.
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Data.SqlClient; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace mustafabukulmez_com_dersler._8_Gridview_den_textbox_a_Veri_cekme { public partial class TextBoxForm : Form { public TextBoxForm() { InitializeComponent(); } SqlConnection con = new SqlConnection(); SqlDataAdapter da = new SqlDataAdapter(); SqlCommand com = new SqlCommand(); DataSet ds = new DataSet(); // Bu değişkene grid formundan ID değerini atayacağız. public int Okunan_ID = 0; private void TextBoxForm_Load(object sender, EventArgs e) { txt_ID.Text = Okunan_ID.ToString(); // Burada Okunan_ID varsa yani bir kaydı güncellemek için bu formu açtırdıysak, // Aldığımız ID değerin ile sqlden tüm verileri çekip textboxlara aktaracağız. // Okunan_ID değeri 0 ise güncelleme işlemi değildir. if (Okunan_ID > 0) { Oku(); } } void Oku() { DataTable dt = new DataTable(); con = new SqlConnection(@"Server=.\SQL2014;Database=mustafabukulmez;User ID=user; Password=sifre;pooling=true; "); da = new SqlDataAdapter("Select * From PERSONEL_TANIMLARI where per_RECno = " + Okunan_ID + "", con); ds = new DataSet(); con.Open(); da.Fill(ds, "Personel"); dt = ds.Tables["Personel"]; con.Close(); txt_per_adi.Text = dt.Rows[0]["per_Adi"].ToString(); txt_per_soyad.Text = dt.Rows[0]["per_Soyadi"].ToString(); txt_per_TC.Text = dt.Rows[0]["per_TC"].ToString(); txt_per_tel.Text = dt.Rows[0]["per_Telefon"].ToString(); } } }
Kodlarımızda yukarıda göründüğü gibidir. Okunan_ID değişkenine aldığımzı veriyi kullanarak SQL den tüm satır bilgisini aldık ve TextBox’lara yazdık.
Burada verdiğim yöntem bence en mantıklı yöntemdir. Bu örnekte girdden almamız gereken 4 yada 5 satırlık bilgi olabilir ama yeri gelecek 60, 70 farklı bilgi gerekecek. Her bu işlem gerektiğinde bu kadar çok değişken tanımlamak hem performans hemde kontrol açısından kötü olacaktır. Bu yüzden benimde sürekli olarak kullandığım yöntemi sizlere anlattım.
C# DataGridView’den Veri Çekme, dersimiz de bu kadar dostlar. Diğer derslerimizde görüşmek üzere.
C Sharp Eğitim Seti eğitimi sayfasına gitmek için tıklayınız.
Ayrıca kısa süre önce tüm YENİ derslerimi tek bir proje içinde yapıp github’a yükleyeceğim demiştim. Bu dersimde o projenin içerisinde bir klasör olarak yerini almıştır. Buraya tıklayarak projeye ulaşabilirsiniz.
Takipte Kalın.
Form 2 de bululana datagrid deki bilgileri tıkladığım zatan form 1 de bulunan textboxlara eklemesini istiyorum bunu nasıl yaparım teşekkürler
Merhaba, Bu istediğiniz işlem için aşağıdaki yazılarımı incelerseniz yapabilirsiniz.
https://mustafabukulmez.com/2018/02/28/c-sharp-global-degiskenler/
https://mustafabukulmez.com/2020/04/02/c-datagridview-den-veri-okuma/
https://mustafabukulmez.com/2018/01/22/c-formlar-arasi-veri-nasil-gonderilir/
Ayrıca belirtmem gerekirki, Gridview’in olduğu formu ShowDialog() ile açmalısınız. Show() ile açılan formlarda, formlar arası veri aktarımı ekstra uğraşlar getirir ve pek mantıklı bir yol değildir.