Farklı Formda Kayıt Ekleme İşleminin Ana Formda Gösterilmesi

Winform projelerinde veritabanı işlemleri yaparken bazen farklı formda kayıt yaptırma ihtiyacı duyarız. İşte Farklı formda kayıt yapılıp Ana forma dönüldüğünde kayıtların güncellenmediğini eklediğiniz kaydın görülmediğine şahit olusunuz. İşte bu problemi çözmek için Application.OpenForms işlemini kullanacağız. Senaryomuz şöyle olacak. Bir Ana formumuz olacak ve Kayıt Ekle butonuna tıkladığımızda yeni bir form açılacak ve kayıt ekleyip formu kapattığımızda eklenen kayıt Ana Formda görülecek. Aşağıda projemizin resmini görmektesiniz.

Bu işlemi üç farklı Veritabanı sistemiyle yapalım.


1.ADO.NET Entity Model ile;

OkulDb adlı veritabanında  yukarıdaki resimdeki alanların olduğu  bir Ogrenci tablosu hazırlayalım ve Entity modelimiz oluşturalım.

Ana formu şöyle kodlayalım; 

OkulDbEntities db = new OkulDbEntities();
public void datagridveri()
{
    dataGridView1.DataSource = db.Ogrenci.ToList();//DataGridViewi Ogrenci tablosu ile doldurduk
    label2.Text = db.Ogrenci.Count().ToString();// Kayıt sayısını Labele yazdırdık.
}
private void Form1_Load(object sender, EventArgs e)
{
    datagridveri();
}
private void button1_Click(object sender, EventArgs e)
{
    Form2 frm = new Form2();
    frm.Show();
}
Form2ye geçelim şu şekilde kodlayalım.
private void button1_Click(object sender, EventArgs e)
{
    Ogrenci ogr = new Ogrenci();
    ogr.OgrenciNo = textBox1.Text;
    ogr.OgrenciAd = textBox2.Text;
    ogr.DogumTarihi = Convert.ToDateTime(dateTimePicker1.Value.ToShortDateString());
    db.Ogrenci.Add(ogr);
    db.SaveChanges();
    MessageBox.Show("Kayıt Yapıldı");
    textBox1.Text = "";
    textBox2.Text = "";
}

private void Form2_FormClosed(object sender, FormClosedEventArgs e)
{
    Form1 frm1 = (Form1)Application.OpenForms["Form1"];//Form1 e ulaştık
    frm1.datagridveri();
}
Eğer Kayıt Formunu ShowDialog Olarak açarsanız kodlarda bazı değişikler yapmalısınız..
Ana formda Kayıt ekle butonu şöyle olmalı;;
 private void button1_Click(object sender, EventArgs e)
 {
     Form2 frm = new Form2();
     frm.ShowDialog();
     datagridveri();
 }
Ve Kayıt formunda Form Closed olayı silinmelidir.


2.ADO.NET ile;
Anaformu şöyle kodlayalım;
 SqlConnection bag;
 SqlDataAdapter da;
 DataSet ds;
 public void datagridveri()
 {
     bag = new SqlConnection(@"Data Source = ahmet\sqlexpress; Initial Catalog = OkulDb; Integrated Security = True");
     da = new SqlDataAdapter("SElect * from Ogrenci", bag);
     ds = new DataSet();
     bag.Open();
     da.Fill(ds, "Ogrenci");
     dataGridView1.DataSource = ds.Tables["Ogrenci"];                                                                                   int kayitsay = dataGridView1.RowCount-1;
     label2.Text =kayitsay.ToString();
     label2.Text = dataGridView1.RowCount.ToString();
     bag.Close();
 }
 private void Form1_Load(object sender, EventArgs e)
 {
     gridveri();
 }

 private void button1_Click(object sender, EventArgs e)
 {
     Form2 frm = new Form2();
     frm.Show();
 }
Kayıt formuna geçelim ve şöyle kodlayalım.
SqlConnection bag;
SqlCommand cmd;
private void button1_Click(object sender, EventArgs e)
{
    bag = new SqlConnection(@"Data Source = ahmet\sqlexpress; Initial Catalog = OkulDb; Integrated Security = True");
    cmd = new SqlCommand();
    bag.Open();
    cmd.Connection = bag;
    cmd.CommandText = "insert into Ogrenci (OgrenciNo,OgrenciAd,DogumTarihi) values ('" + textBox1.Text + "','" + textBox2.Text + "','" + Convert.ToDateTime(dateTimePicker1.Value.ToShortDateString()) + "')";
    cmd.ExecuteNonQuery();
    bag.Close();
    MessageBox.Show("Kayıt eklendi");
    textBox1.Text = "";
    textBox2.Text = "";

}

private void Form2_FormClosed(object sender, FormClosedEventArgs e)
{
    Form1 frm = (Form1)Application.OpenForms["Form1"];
    frm.datagridveri();
}

Eğer Kayıt Formunu ShowDialog Olarak açarsanız kodlarda bazı değişikler yapmalısınız..
Ana formda Kayıt ekle butonu şöyle olmalı;;
 private void button1_Click(object sender, EventArgs e)
 {
     Form2 frm = new Form2();
     frm.ShowDialog();
     datagridveri();
 }
Ve Kayıt formunda Form Closed olayı silinmelidir.


3.BindingSource nesnesi ile;
Ana formda Data Sources penceresini  kullanarak bu yazımda anlattığım şekilde veritabanına bağlanın. Data Sources penceresindeki Ogrenci tablosunu sürükleyip Ana forma bırakın. Böylece Datagridview oluşacak ve verilerimiz gösterilecektir.
Şimdi Ana formu kodlayalım; OkulDataset, OgrenciBindingSource, OgrenciTableAdabter, tableAdapterManager ve Label2 nin Modfiers özelliğini Properties penceresinden Public yapalım.
 private void Form1_Load(object sender, EventArgs e)
 {
     this.ogrenciTableAdapter.Fill(this.okulDbDataSet.Ogrenci);
     label2.Text = ogrenciBindingSource.Count.ToString();

 }

 private void button1_Click(object sender, EventArgs e)
 {
     Form2 frm = new Form2();
     frm.Show();
 }
Kayıt Formuna geçelim ve şöyle kodlayalım.
 private void button1_Click(object sender, EventArgs e)
 {
     Form1 frm = new Form1();
     frm.ogrenciBindingSource.AddNew();
     DataRowView aktifkayıt = (DataRowView)frma.ogrenciBindingSource.Current;
     aktifkayıt.Row["OgrenciNo"] = textBox1.Text;
     aktifkayıt.Row["OgrenciAd"] = textBox2.Text;
     aktifkayıt.Row["DogumTarihi"] = Convert.ToDateTime(dateTimePicker1.Value.ToShortDateString());
     frm.ogrenciBindingSource.EndEdit();
     frm.ogrenciTableAdapter.Update(frma.okulDbDataSet.Ogrenci);
     MessageBox.Show("Kayıt eklendi");
     textBox1.Text = "";
     textBox2.Text = "";
 }
 private void Form2_FormClosed(object sender, FormClosedEventArgs e)
 {
     Form1 frm = (Form1)Application.OpenForms["Form1"];
     frm.ogrenciTableAdapter.Fill(frm.okulDbDataSet.Ogrenci);
     frm.label2.Text = frm.ogrenciBindingSource.Count.ToString();
 }
Eğer Kayıt Formunu ShowDialog Olarak açarsanız kodlarda bazı değişikler yapmalısınız..
Ana formda Kayıt ekle butonu şöyle olmalı;;
 private void button1_Click(object sender, EventArgs e)
 {
     Form2 frm = new Form2();
     frm.ShowDialog();
     ogrenciTableAdapter.Fill(okulDbDataSet.Ogrenci);
 }

Ve Kayıt formunda Form Closed olayı silinmelidir.

Faydalı olması dileğiyle.Kolay gelsin.


Etiketler
Applicatıon OpenForms Entıty Model ADO Net
Mesaj Yaz