none
C# Formlar arası veri güncellemesi RRS feed

  • Soru

  • Herkese merhaba, ufak bir teknik servis programı yapıyorum işin içinden çıkamadığım bir durum var şöyle izah edeyim;

    iki adet form1 var. biri form1 diğeri müşterikayıt. benim istediğim şey şu, kaydettiğim son müşteriyi kaydettikten sonra müşteri bilgileri ekranına getirsin şöyle bir şey yaptım ama çalışmadı. breakpoint koyunca bilgileri görüyorum fakat oraya yerleştirmiyor yardımlarınız için şimdiden teşekkürler.

    Kod şu şekilde. kaydet olayını gerçekleştirdikten sonra başka müşteri kaydetmek istiyor musunuz diye mesaj çıkıyor hayır dersem bu kaydettiğim son müşteriyi ana ekrana yerleştirmesini istiyorum. gözümden kaçan bir yer var diye tahmin ediyorum

    private void button1_Click(object sender, EventArgs e)
            {
    
                try
                {
    
                    if (textBox1.Text != "" && textBox2.Text != "" && textBox3.Text != "" && textBox4.Text != "" && textBox5.Text != "" && textBox6.Text != "")
                    {
    
                        double telefon = Convert.ToDouble(textBox3.Text);
                        komut = new SqlCommand();
                        ds = new DataSet();
                        komut.Connection = baglanti;
                        komut.CommandText = "Insert Into musterikayit(ad,soyad,telefon,adres,şehir,ilçe) Values ('" + textBox1.Text + "','" + textBox2.Text + "','" + telefon + "','" + textBox4.Text + "','" + textBox5.Text + "','" + textBox6.Text + "')";
                        baglanti.Open();
                        komut.ExecuteNonQuery();
                        baglanti.Close();
                        ds.Clear();
                        verilerimigoster("select * from musterikayit");
                        DialogResult secenek = MessageBox.Show("Kayıt Başarıyla Tamamlandı! \n Başka Müşteri Kaydetmek istiyor musunuz ?", "Bilgilendirme Penceresi", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                        if (secenek == DialogResult.Yes)
                        {
                            textBox1.Clear();
                            textBox2.Clear();
                            textBox3.Clear();
                            textBox4.Clear();
                            textBox5.Clear();
                            textBox6.Clear();
                        }
    
                        else if (secenek == DialogResult.No)
                        {
                            Form1 ana = new Form1();
                            SqlConnection baglanti2 = new SqlConnection("Data Source=DESKTOP-IGNT3K1\\SERVER;Initial Catalog=müşteriler;Integrated Security=True");
                            SqlCommand cmd2 = new SqlCommand();
                            baglanti2.Open();
                            cmd2.Connection = baglanti2;
                            cmd2.CommandText = "SELECT top 1 * FROM musterikayit ORDER BY id DESC";
                            cmd2.ExecuteNonQuery();
                            SqlDataReader dr = cmd2.ExecuteReader();
                            if (dr.Read())
                            {
                                ana.mus_no.Text = dr["id"].ToString();
                                ana.ad_text.Text = dr["Ad"].ToString();
                                ana.soyadi_text.Text = dr["Soyad"].ToString();
                                ana.telefon_text.Text = dr["Telefon"].ToString();
                                ana.adres_text.Text = dr["Adres"].ToString();
                                ana.sehir_text.Text = dr["Şehir"].ToString();
                                ana.ilce_text.Text = dr["İlçe"].ToString();
                            }
    
                            ana = null;
                            if (Application.OpenForms["Form1"] == null)
                            {
                                //back = new Form1();
                                ana.Show();
                            }
                            else
                            {
                                ana = Application.OpenForms["Form1"] as Form1;
                                ana.Show();
    
                            }
                            this.Close();



    26 Ağustos 2018 Pazar 19:33

Yanıtlar

  • Merhaba

        Öncelikle OpenForms Property' sinden sadece show edilmiş formları alabilirsiniz.

    Yani OpenForms["Form1"] her zaman null gelir. ana değişkenine null atamadan önce   ana.show() method'unu çalıştırın. Sanırım bu işinizi görecektir.

    Kodun geri kalanını anlamadım. 

    Ayrıca this.Close() sadece ilgili formu'değil yeni açtığınız formu' da kapatacaktır. Çünkü mainThread' i sonlandırıyorsunuz. Bu satırıda silin.

     


    _ASC_


    • Düzenleyen Sinan ŞENBAŞ 26 Ağustos 2018 Pazar 20:46
    • Yanıt Olarak İşaretleyen Mert Certel 27 Ağustos 2018 Pazartesi 10:17
    26 Ağustos 2018 Pazar 20:42
  • Merhaba Mert,

    Düğme arkası programcılığını bırakıp OOP yöntemlere geçerseniz hem sürdürülebilir hem de kısa sürede geliştirilen uygulamalar yazmış olursunuz. "Ben tecrübe dinlemek istemiyorum, kısa kesip bu haliyle bana cevap ver!" diyorsanız, ne kadar kötü bir yol olsa da "public static"  bir sınıf oluşturabilirsiniz. Bu sınıf tüm formlardan görülebilir olacaktır. İletişimi bunun üzerinden sağlayabilirsiniz.


    www.cihanyakar.com


    • Düzenleyen Cihan YakarMVP 27 Ağustos 2018 Pazartesi 07:09
    • Yanıt Olarak İşaretleyen Mert Certel 27 Ağustos 2018 Pazartesi 10:17
    27 Ağustos 2018 Pazartesi 07:09

Tüm Yanıtlar

  • Merhaba

        Öncelikle OpenForms Property' sinden sadece show edilmiş formları alabilirsiniz.

    Yani OpenForms["Form1"] her zaman null gelir. ana değişkenine null atamadan önce   ana.show() method'unu çalıştırın. Sanırım bu işinizi görecektir.

    Kodun geri kalanını anlamadım. 

    Ayrıca this.Close() sadece ilgili formu'değil yeni açtığınız formu' da kapatacaktır. Çünkü mainThread' i sonlandırıyorsunuz. Bu satırıda silin.

     


    _ASC_


    • Düzenleyen Sinan ŞENBAŞ 26 Ağustos 2018 Pazar 20:46
    • Yanıt Olarak İşaretleyen Mert Certel 27 Ağustos 2018 Pazartesi 10:17
    26 Ağustos 2018 Pazar 20:42
  • Merhaba Mert,

    Düğme arkası programcılığını bırakıp OOP yöntemlere geçerseniz hem sürdürülebilir hem de kısa sürede geliştirilen uygulamalar yazmış olursunuz. "Ben tecrübe dinlemek istemiyorum, kısa kesip bu haliyle bana cevap ver!" diyorsanız, ne kadar kötü bir yol olsa da "public static"  bir sınıf oluşturabilirsiniz. Bu sınıf tüm formlardan görülebilir olacaktır. İletişimi bunun üzerinden sağlayabilirsiniz.


    www.cihanyakar.com


    • Düzenleyen Cihan YakarMVP 27 Ağustos 2018 Pazartesi 07:09
    • Yanıt Olarak İşaretleyen Mert Certel 27 Ağustos 2018 Pazartesi 10:17
    27 Ağustos 2018 Pazartesi 07:09
  • Çok teşekürler. sorunu çözdüm :)
    27 Ağustos 2018 Pazartesi 09:56
  • estagfurullah hocam. bunu diyebilmek için daha çok çok fırın ekmek yemem lazım ne haddime :) benim şu an yaptığım ile sizin bahsettiğiniz OOP yöntemleri arasındaki farkı kısaca anlatabilir misiniz ?
    27 Ağustos 2018 Pazartesi 09:57
  • Şu an müşteri kaydını bir düğme kullanarak sağladın. Büyük bir projede bu başka bir formda tekrar gerekirse ne yapacaksın? O kodu kopyalayıp diğer formdaki düğmenin altına koyacaksın... Bunu yüzlerce işlem için defalarca yapacaksın. Veritabanında olan her değişiklik için tek tek tek her yeri değiştireceksin. Insert ederken bir de her bir kontrolün adını kullanarak değerleri aktarıyorsun. Kopyala yapıştır yaparken bir de bunları yeniden adlandırman gerekecek... Ölme eşeğim ölme...

    OOP prensipleri kullanıldığında, veri erişimini arayüzden tamamen izole edilir. Yeni bir müşteri ekleyeceksin, sallıyorum en basitinden yukarıdaki kodun şöyle olmalı:

    private void button1_Click(object sender, EventArgs e)
    {
       IsKatmanim.Musteri.YeniEkle(new Musteri{Ad=txtAd.Text});
    }
    Bu durumda YeniEkle metodun arayüzden bağımsız hale gelmiş olacak ve defalarca kullanabilir olacaksın. 


    www.cihanyakar.com

    27 Ağustos 2018 Pazartesi 12:15