Herkese merhaba,

Bu makalemde LINQ’daki join işleminden ve mobil uygulamalarda sıklıkla kullandığımız listbox’larda resim ve text’in beraber kullanımını örnek bir uygulama ile anlatacağım.

Uygulamamız bazı şehirleri ve bu şehirlere göre bazı radyo istasyonlarının frekanslarını tutan bir uygulama olsun. Yani şehir listemden şehiri seçeceğim. Sonra seçtiğim bu şehire göre bana kayıtlı olan radyo istasyonlarının frekansları listelenecek. Radyoları listelerken ise ben radyo istasyonlarının logolarını ve isimlerini yazdırmak istiyorum. Zaman kaybetmeden uygulamamıza geçelim.

Microsoft Visual Studio 2011′i çalıştırıp File –> New –> Project –> Windows Phone Application adımlarını izleyerek projemizi oluşturuyoruz. MainPage.xaml dosyamızı aşağıdaki şekilde hazırlıyoruz. (XAML kodu aşağıdadır.)

WP

[xaml]

Gördüğünüz gibi iki MainPage.xaml dosyamızda “lst_sehir” ve “lst_radio” olmak üzere iki adet listbox’ımız var. Uygulamamızda kullanacağımız veritabanımızda 3 adet tablomuz vardır. Bunlardan ilki “Radiolar” isimli tablomuzdur. Bu tablomuz RadioId, RadioAdi ve RadioImgURL isimli sütunlardan oluşmaktadır. İkinci tablomuz ise “Sehirler” ismindedir. Bu tablomuzdaki alanlar ise SehirId ve SehirAdi şeklindedir. Üçüncü ve son tablomuz ise “RadioBilgisi” isminde olup SehirId, RadioId ve Frekans isimli alanlardan oluşmaktadır. Uygulamamızda veritabanımızın kullanımından bahsetmem gerekirse Sehirler tablomuzdan bilgileri alıp lst_sehir isimli listbox’ımızda şehirlerimizin isimlerini görüntüleyeceğiz. Kullanıcı bir şehri seçtiğinde ise RadioBilgisi isimli tablodan şehrimize ait kayıtları lst_radio isimli listbox’da görüntüleyeceğiz. Bu bilgileri verdikten sonra veritabanımızı oluşturacak kodları yazalım. Bunun için ilk olarak projemize “System.Data.Linq” referansımızı ekliyoruz ve build ediyoruz. Ardından projemize öncelikle “Radio.cs” isimli sınıfımızı ekliyoruz. İçerisine aşağıdaki kodlarımızı ekliyoruz.

[C#]

Ardından projemize “RadioDataContext.cs” isimli sınıfımızı ekliyoruz. Burada connection stringimizi yazıyoruz. RadioDataContext.cs içerisindeki kodlarımız aşağıdaki gibidir:

[C#]

Bu işlemin ardından projemize “RadioDeposu.cs” isimli sınıfımızı ekliyoruz. Burada veritabanımızı oluşturup içerisine verilerimizi ekliyoruz. Kullandığımız kodlar aşağıdaki gibidir:

[C#]

Şimdide son olarak “Rdd.cs” isimli sınıfımızı projemize ekliyoruz. İçerisindeki kodlar aşağıdaki gibidir.

[C#]

Buraya kadar projemizde kullanacağımız veritabanımızı ve verilerimizi oluşturmuş olduk. Şimdi sıra geldi veritabanımızdan bir verinin LINQ ile alınması ve listbox’ların kullanımını. Mainpage.xaml.cs dosyamızı açıyoruz. Hatırlarsanız makalemin başında öncelikle şehirlerimizi listeleyeceğimizi söylemiştim. Bunun için Mainpage.xaml.cs dosyamızın içerisine aşağıdaki kodlarımızı ekliyoruz.

[C#]

ObservableCollection sınıfını kullanabilmemiz için “using System.Collections.ObjectModel” referansımızı eklememiz gerekiyor. Veritabanımıza bağlanmak için DataContext kullanıyoruz. Ardından sorgumuzu yazıyoruz. Burada Sehirid=u.SehirID ile sehiradi=u.SehirAdi satırlarına dikkat etmenizi istiyorum. Sehirid ve sehiradi yerine başka isimlerde kullanabilirsiniz. Bu isimleri sehir isimli ObservableCollection nesnemizde içerisindeki verilere ulaşmak için kullanıyoruz. Bilgilerimizi lst_sehir isimli listbox’a aktarmış olduk. Şehir seçimi kısmına geçecek olursak bunun için lst_sehir isimli listboxımızın SelectionChanged eventını kullanıyoruz. Aşağıda kırmızı dikdörtgen ile belirttiğim kodlar yeni eklememiz gereken kodlardır.

[C#]

 

Burada integer tipinde secsehirid isimli bir değişken ile ikinci bir ObservableCollection tanımladık. Şehirlerimizin listelendiği listbox’dan seçilen ilimizin idsini secsehirid isimli değişkenimize aktarıyoruz ve yeni bir sorgu oluşturuyoruz. Bu sorgumuzda yapacağımız işlem şu: Seçilen ile ait radyo istasyonlarının frekanslarının listelenmesidir. Kodumuza göre ifade etmem gerekirse secsehirid değişkeninde tutulan idye ait kayıtların RadioBilgisi ve Radiolar isimli tabloların join edilmiş halinden kayıtları almaktır. Bu iki tablonun ortak alanları RadioID isimli alanlarımızdır. Neden böyle bir join işlemine ihtiyaç duyduk derseniz biz radyo istasyonlarını listelerken onlara ait logoları da listelemek istiyoruz. Logoların tutulduğu adres bilgisini ise Radiolar isimli tabloda “RadyoImgURL” isimli alanda tutuyorduk. Sıra geldi “MainPage.xaml” sayfamızdaki listboxlar ile ilgili yaptığımız değişikliklerin anlatılmasına. İlk olarak lst_sehir isimli listboxmızı ele alalım. Listboxların itemları ile ilgili değişiklik yapacaksak xaml tarafında bunu ifade etmemiz lazım. Bu işlem için öncelikle “Lisbox.ItemTemplate” bloklarını oluşturuyoruz. Ardından “DataTemplate” bloklarını oluşturuyoruz. İçerisine kullanacağımız bileşenleri ekliyoruz (TextBlock, Image vb. gibi). Burada dikkat edeceğimiz kısım ise TextBlock’lar için Text= “{ Binding SehirAdi }” kısmıdır. Burada sehir isimli ObservableCollection içerisindeki verilerden SehirAdi isimli alanının içerisindeki verileri bu listboxa bind ediyoruz. İkinci listbox için ise yukarıdaki adımları yaptıktan sonra bir stackpanel içerisine Image ve TextBlock ekliyoruz. Stackpanel eklememizin sebebi ise resim ile text’in yanyana yazmasını sağlamak içindir. Yine yukarıdaki gibi gerekli binding kısımları düzenliyoruz.

 

Umarım işinize yarar. Uygulamamızın ekran çıktıları aşağıdaki gibidir:

Listbox kullanımı ve LINQ’da join işlemi
Etiketlendi:                     

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir