Bu WPF ile altıncı uygulamamız.
Bir önceki uygulamamızda DataGrid ile MS Access bağlantısını kurup pratik
kodlarla( sql sorgu cümleleri kullanmadan)
verilerimizi DataGrid e aktarmııştık. Bu yazımızda ise sql
sorgu cümleleri kullanarak birden fazla tabloda nasıl sorgu yapıyoruz ve tarih sorgularını ne şekilde
gerçekleştiriyoruz bunlara göz atacağız.
Öncelikle veritabanım aşağıdaki
gibi Kimlik ve no sütunları ile birbirlerine bağlantılı durumda. Yeni bir proje
oluşturarak projeme MS Access veritabanımı ekliyorum.
Projemi
oluşturduktan sonra pencereme DataGrid i sürükleyip bırakıyorum ve istediğim
ölçülerde boyutunu ayarlıyorum. Daha
sonra Xaml kısmına DataGrid etiketi içerisine aşağıdaki gibi ItemSource kodunu
ekliyorum. Eğer bunu eklemezsek kod kısmı hatasız olsa da verilerimiz DataGrid
e aktarılmayaaktır. Ayrıca DataGrid e isim vermeyi de unutmayalım.
<DataGrid ItemsSource="{Binding}" ... />
|
Şimdi C# kısmına geçerek kodlarımızı eklemeye
başlayalım. Öncelikle gerekli olan kütüphanelerimizi ekleyelim.
using System.Data;
using
System.Data.OleDb;
|
public partial class MainWindow : Window
{
DataSet set;
OleDbDataAdapter
adapter;
OleDbConnection con;
public MainWindow()
{
InitializeComponent();
}
}
|
Yukarıdaki
gibi set ( verileri tutar ) , adapter (sorgu cümlesi ile bağlantıyı tanımlar)
,con ( bağlantıyı kurar ) tanımladık. Şimdi de MS Access in yolunu tanımlayalım
ve bağlantıyı kuralım.
public MainWindow()
{
InitializeComponent();
string yol = Properties.Settings.Default.KitaplıkConnectionString;
try
{
con = new OleDbConnection(yol);
}
catch
{
MessageBox.Show("Bağlantı Hatası!");
}
getKitap();
}
|
Burada
olduğu gibi yolu kolay bir şekilde ayarlayabiliyoruz. Daha sonra ise try-catch ile bağlantının hata
verip vermediğini kontrol ediyoruz. Bundan sonra verilerimizi DataGrid e
aktarmak için getKitap() adında bir
fonksiyon tanımlıyorum ve aşağıdaki gibi kodlarımı yazıyorum.
private void getKitap()
{
string sorgu = "select * from Kitaplar inner join Tarihler on
Kitaplar.Kimlik=Tarihler.no";
string sorgu2 = "select * from Kitaplar,Tarihler where
Kitaplar.Kimlik=Tarihler.no";
adapter = new OleDbDataAdapter(sorgu,
con);
set = new DataSet();
con.Open();
adapter.Fill(set, "Kitaplar");
con.Close();
datagrd.DataContext = set.Tables[0];
}
|
Yukarıdaki
kodda iki tane sorgu cümlesi var ve ikisi de tablolarımın tek tablo olarak
getirilmesini sağlıyor. İki sorgu cümlesi de aynı işi yapar. Bu kodlar
sonucunda aşağıdaki gibi verilerim DataGrid aktarılmış olacaktır. Eğer birden
fazla tabloda sorgu yapacaksak inner join,joining
konularına göz atmamızda fayda vardır.
Şimdi
de tarih sorgusu yapalım. Bunun için Xaml kısmına bir DatePicker ve hemen altına bir tane daha DataGrid
ekliyorum. Amacım seçili tarihteki kayıtlı bulunan kitapların listelenmesi.
Bu
işlem için DatePicker ı ekledikten ve isim verdikten sonra seçili iken
properties kısmından Event sekmesinden SelectedDateChanged kısmana çift
tıklayarak fonksiyon oluşturuyorum ve aşağıdaki gibi kodlarımı ekliyorum.
private void
DatePicker_SelectedDateChanged_1(object sender, SelectionChangedEventArgs e)
{
DateTime time =
date.SelectedDate.Value.Date;
string sorgu3 = "select * from Kitaplar inner join Tarihler on Kitaplar.Kimlik=Tarihler.no where
Tarihler.tarih=#" + time.Day + "/" +
time.Month + "/" + time.Year + "#";
set = new DataSet();
adapter = new OleDbDataAdapter(sorgu3,
con);
con.Open();
adapter.Fill(set, "Kitaplar");
con.Close();
grd2.DataContext = set.Tables[0];
}
|
Tarih
sorgularında sorgu cümlelerinde sorguların başına “#” koymayı unutmayalım yoksa
program hata verir veya istediğimiz şekilde sonuç üretmez.
Sütunları
nasıl istediğimiz gibi düzenleyebileceğimizi ve seçili satırdaki sütun
bilgilerine nasıl ulaşacağımıza bir önceki yazımıza aşağıdaki linke tıklayarak
ulaşabilirsiniz. Ayrıca uygulamayı diskten paylaşıyorum isteyenler indirip göz
atabilirler. Bir sonraki yazımızda ise ekleme , silme ve güncelleme işlemlerine
değineceğiz.