Bu yazımızda C# Windows Form kullanarak Türkiye il ve ilçelerinin bulunduğu veritabanından veri çekme işlemini gerçekleştireceğiz. Örneğimizde Combobox1 ve Combobox2 kontrollerini kullanacağız.
Form açıldığında Combobox1 içine illeri yüklenmesini sağlayacağız. Daha sonra Combobox1‘ de seçilen il ismine göre ilçelerin Combobox2‘de listelenmesini sağlayacağız.
Kullanacağımız veritabanına göz atalım. Örneğimizde dbSehir isimli SQL veritabanını kullanacağız. Bu veritabanının içinde iller ve ilceler isimli 2 tablo bulunmakta. Bu tablolara ait tasarım ve ilşkilendirmeleri oluşturuyoruz.
Daha sonraboş bir Windows Form projesi oluşturarak projemize başlıyoruz.
Formumuzu yukarıdaki gibi 2 adet Combobox ekleyerek tasarladıktan sonra Solution Explorer penceresinde projemizin üzerinde sağ tıklayarak Add-New Item diyoruz ve açılan pencereden Linq to SQL Classes seçerek Tamam diyoruz.
Daha sonraki adımda Server Explorer penceresinden veritabanımızda bulunan iller ve ilceler tablosunu sürükle bırak yöntemiyle taşıyoruz.
Artık geriye en basit kısım kalıyor 🙂 .
Kodlarımızı oluşturuyoruz.
Form açıldığında Combobox1’de illerin gelmesini ve Combobox1’de seçili ile göre ilçelerin Combobox2’ye doldurulmasını sağlayacağız. Burada dikkat edilmesi gereken Combobox kontrollerine ait ValueMember ve DisplayMember özelliklerinin doğru bir şekilde tanımlanması ve veritabanında tablolar arası ilişkinin düzgün bir şekilde yapılması olacaktır.
Kodlarımız aşağıdaki gibi olacaktır.
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 | 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; namespace linqtosql_ililce { public partial class Form1 : Form { public Form1() { InitializeComponent(); } DataClasses1DataContext db; private void Form1_Load(object sender, EventArgs e) { db = new DataClasses1DataContext(); comboBox1.ValueMember = "id"; comboBox1.DisplayMember = "sehir"; comboBox1.DataSource = db.illers.ToList(); } private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) { if (comboBox1.SelectedIndex != -1) { var sehirilceler = from i in db.ilcelers where i.sehir == Convert.ToInt32(comboBox1.SelectedValue) select i; comboBox2.ValueMember = "id"; comboBox2.DisplayMember = "ilce"; comboBox2.DataSource = sehirilceler; } } } } |
Uygulamanın Videosu:
linq to sql de tablonun tamamını çekmek yerine sadece istediğimiz sütunu çekebiliyorduk diye hatırlıyorum ama nasıl yapıldığını bilmiyorum. onunla ilgile bir ders hazırlar mısınız?
Evet istenen sütun çekilebiliyor. Örneğin yukarıdaki örnekte
var sehirilceler = from i in db.ilcelers
where i.sehir == Convert.ToInt32(comboBox1.SelectedValue)
select i;
“select i” den sonra “.” (nokta) ya basarsan sütun isimleri gelecektir. Yani select i.sehir yaparak sadece sehir sütununu çekebilirsin.
desteğin için teşekkür ederim. eline sağlık yaptım… Fakat anlayamadığım bir yer var.
var sehirilceler = from i in db.ilcelers
where i.sehir == Convert.ToInt32(comboBox1.SelectedValue)
select i;
anlamadım. 1)var sehirilceler = from i in db.ilcelers ne anlama geliyor.
2) where i.sehir == Convert.ToInt32(comboBox1.SelectedValue) kısmında seçilen değer int. değilmi. neden kod bizden int. dönüştürmemizi istiyor.