Sizlere ComboBox’un textbox’ına elle yazılan bir veriyi, veritabanına kaydetme işlemini anlatacağım.

Mesela şöyle açıklayım. Diyelim ki veritabanından ComboBox içerisine veri çekiyorsunuz. Programınız çalışırken ComBobox içerisinde yer almayan, ComboBox’ın text’ine elle bir kayıt girdiniz. Bu kayıt girildikten sonra kullanıcıya, eğer ComboBox içerisindekilerden farklı bir değer girildiyse uyarı verecek. Bu kayıtı veritabanına kaydetmek istiyor musunuz? diye. Örneğimizle daha iyi anlayacağınıza eminim.

Önce bir Windows Form projesi oluşturunuz. Form’a bir adet ComboBox ekleyin ve 1 adet de textBox ekleyin. Veritabanı bağlantısı yapın ve ComboBox’a veritabanındaki bir tablonuzdan veri çekin.

Şimdi eğer ComboBox’a veri çekme işlemini yaptıysanız, gelelim konumuza. Diyelim ki ComboBox’a çektiğiniz veriler; ismail, ahmet, selin isimlerinden oluşuyor. Şimdi siz ComboBox’ın içerisine elle murat yazdınız. Size şöyle bir soru soracak.” Veritabanında kayıtlı bir isim değil. Kaydetmek istiyor musunuz ? ” diye. Form’da bulunan ComboBox ile textBox’a veri gireceğimizi düşünelim. Kodlarımızı yazmaya başlayalım.

İlk başta ComboBox’ın Properties penceresindeki Events(olaylar) kısmından Focus Leave’e çift tıklayarak kod ekranına geçiyoruz.

private void comboBox1_Leave(object sender, EventArgs e)
{
    bag.Open();
    OleDbCommand cmd = new OleDbCommand("Select ogrAdi FROM ogr WHERE ogrAdi='" + comboBox1.Text + "'", bag);
    OleDbDataReader rdr = cmd.ExecuteReader();
    if (rdr.Read())
    {
    }
    else if (MessageBox.Show(" Veritabanına kaydetmek istiyor musunuz ?""Dikkat", MessageBoxButtons.YesNo,
    MessageBoxIcon.Question) == DialogResult.Yes)
    {
        OleDbCommand cmd2 = new OleDbCommand("INSERT INTO ogr(ogrAdi) VALUES('" + comboBox1.Text + "')", bag);
        cmd2.ExecuteNonQuery();
        MessageBox.Show("Kayıt Başarılı !""Bilgi", MessageBoxButtons.OK, MessageBoxIcon.Information);
    }
    bag.Close();
}

Buradaki ilk yazdığımız kodlarla veritabanında aynı değerde bir isim var mı yok mu onu denetler. Varsa hiç bir işlem yapmaz ve kayıt etmez. İsterseniz ilk if denetiminin içine bir MessageBox yardımı ile bunu kullanıcıya söyleyebilirsiniz. Ama bu mesajda kullanıcı için can sıkıntısı olabilir, boş kalması bence daha iyi. İkinci else if denetiminde ise, yazılan değer veritabanında kayıtlı değil ise kullanıcıya kaydetmek istiyor musunuz? diye sormaktadır. Evet derse kayıt işlemi gerçekleşecektir ve bir sonraki kayıt işleminde ComboBox listesinde görünecektir. Hayır derse hiç bir işlem yapılmayacaktır.

Burda kodları Leave olayına yazmamın sebebi ise kullanıcı tab tuşuna bastığında ya da mouse ile bir altındaki textBox’a geçtiğinde kayıt işlemi için soruyu sormasını istediğimdendir. Yoksa örneğin ComboBox’ın text_changed olayına yazsam kodları, o zaman her harfe bastığında, kaydetmek istiyor musunuz ? diye soracak. Bu da bir hata demektir. Hepsi bu kadar.