C# WPF DataGrid
Bu wpf
ile beşinci uygulamamız. Bu uygulamamızda DataGrid e nasıl veri tabanımızdaki
verilerimizi aktarıyoruz buna bakacağız. WPF ile DataGrid e veri aktarma işini
iki şekilde yapabiliriz. Bunlardan ilki sql cümleleri neredeyse hiç kullanmadan
kullanmadan WPF nin bize sağladığı kodlarla bu işi yapabiliriz(oldukça kolay ve
kullanışlı) veya sql cümleleri kullanarak da bu
işi yapabiliriz. Biz bu yazımızda iki kullanımında nasıl olduğunu basit bir
örnek ile kavramaya çalışacağız.
Bu
uygulama için aşağıdaki gibi bir MS Access ile oluşturdum. Bu veri tabanında
Kitap Adı , Yazar , Kitabevi , Sayfa ve Fiyat bilgilerini tutuyorum.
Şimdi
birinci uygulamamıza başlayabiliriz. Bunun için yeni bir WPF projesi oluşturuyoruz.
İlk Uygulama
Oluşturduğum
veri tabanını Solution Explorer daki projemin üzerine sağ tık ile Add--> Existing Item seçeneği
ile veri tabanımı projeme ekliyorum.
Veri
tabanım eklediğine göre Pencereme DataGrid i sürükleyip bırakıyorum ve
istediğim boyutlarda ayarlıyorum ve “grd” ismini
veriyorum.(C# kısmında gözükmesi için gerekli) Bunun haricinde verilerimizin
DataGrid de gözükebilmesi için ItemSource=”{Binding}” şeklinde ayarlamamızı yapmalıyız.
Şimdilik Xaml kodumuz aşağıdaki gibi oldu.
<Window x:Class="database1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow"
Height="350" Width="525">
<Grid>
<DataGrid x:Name="grd" ItemsSource="{Binding}" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" Height="299" Width="497"/>
</Grid>
</Window>
|
Şimdi
C# kısmına geçip kodlarımı aşağıdaki gibi ekliyorum.
namespace database1
{
/// <summary>
/// Interaction logic for
MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
/* 1.Aşama Kitaplık isimli veritabanımda Kitaplar isimli
tablom için bir adapter tanımlıyorum.
Kitaplık veritabanım için bir Dataset tanımlıyorum.*/
private KitaplıkDataSetTableAdapters.KitaplarTableAdapter
adapter = new KitaplıkDataSetTableAdapters.KitaplarTableAdapter();
private KitaplıkDataSet set =
new KitaplıkDataSet();
public MainWindow()
{
InitializeComponent();
/*2.Aşama DataContex e getKitaplar adıyla tanımladığım
fonksiyondan dönen bilgileri aktarıyorum.
Böylece
DataGrid gelen verilerle dolduruluyor.*/
adapter.Fill(set.Kitaplar);
grd.DataContext = getKitaplar();
}
private DataView getKitaplar()
{
return
set.Kitaplar.DefaultView;
}
}
}
|
Bu
haliyle hazır. Derleyip çalıştırdığımızda verilerimizin aktarıldığını
görebiliriz. Eğer göremiyorsak ItemSource=”{Binding}” kısmını yazdığımızdan emin olalım. Birde
getKitaplar( ) şeklinde tanımladığımız fonksiyonun dönüş tipinin DataView olduğundan emin
olalım.
Çalıştırdık
ve verilerimiz gözüküyor. Şimdi ki işlemde ise sütunlara bizim istediğimiz ismi
verelim. Ancak üstteki gibi bizim veri tabanında verdiğimiz isimler aradaki “_”
silinerek yazılmış. Tam isimleri görebilmek için Solution Explorer’da ki …..DataSet.xsd ye
çift tıklayarak tablomuzdaki sütun adlarının tam olarak nasıl olduğunu
görebiliriz.
Aşağıdaki
gibi Binding ile Sütun isimlerimi ekliyorum.
<Grid>
<DataGrid x:Name="grd" ItemsSource="{Binding}" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" Height="299" Width="497">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Path=Kimlik}" Header="No"/>
<DataGridTextColumn Binding="{Binding Path=kitap_ad}" Header="Kitap Adı"/>
<DataGridTextColumn Binding="{Binding Path=yazar}" Header="Yazar"/>
<DataGridTextColumn Binding="{Binding Path=yayin_evi}" Header="Yayınevi"/>
<DataGridTextColumn Binding="{Binding Path=sayfa}" Header="Sayfa Sayısı"/>
<DataGridTextColumn Binding="{Binding Path=fiyat}" Header="Fiyat"/>
</DataGrid.Columns>
</DataGrid>
</Grid>
|
Path
ile veri tabanındaki sütun ismini , Header ile DataGrid sütununda gözükmesini
istediğimiz ismi yazdık. Bu kodları yazarken hemen üstünde de siz ekledikçe
eklediğiniz sütun ismi gözükecektir. Eğer gözükmüyorsa bir yerlerde hata var
demektir. Çalıştırdığımızda aşağıdaki gibi bir görüntü elde ediyorum.
Burada
hem yeni eklediğim sütunlar hem de sonradan eklediğim sütunlar gözüküyor. Bunu
engellemek için eklediğimiz sütuna kadar DataGrid in uzunluğunu ayarlıyoruz ve
üstteki resmin alt kısmında gözüken yatay kaydırma çubuğunu iptal ediyoruz.
Bunun için DataGrid seçili iken Properties kısmından HorizontalScrollBarVisibility özelliğini “Hidden”
olarak değiştiriyoruz. Sonuçta aşağıdaki gibi kendi verdiğim sütun isimlerinin
gözükmesini sağlıyorum.
Buraya
kadar sorun yoksa devam edelim. Şimdi de güncelleme işlemlerini nasıl kolay bir
şekilde yapacağımıza bakalım. Bunun için aşağıdaki gibi Kodlarımı yazıyorum ve artı
eşittir den sonra program benden otomatik olarak Tab+Insert e basmamı istiyor.
Basınca fonksiyonu kendisi otomatik oluşturuyor.
public MainWindow()
{
InitializeComponent();
adapter.Fill(set.Kitaplar);
grd.DataContext = getKitaplar();
set.Kitaplar.RowChanged
+= Kitaplar_RowChanged;
}
void
Kitaplar_RowChanged(object sender, DataRowChangeEventArgs e)
{
adapter.Update(set.Kitaplar);
}
|
Gözüktüğü
gibi yeşil olan kısımları ekleyerek program çalışırken seçili hücreyi
değiştirip Enter a bastığınızda güncelleme işlemini gerçekleştirilecektir.
Ancak bu güncelleştirmenin doğruluğunu test edebilmek için projeyi derleyip
çalıştırdığımızda projenin bulunduğu klasördeki bin --> Debug -->Veri Tabanını çalıştırarak
güncelleme yapıp yapmadığını test edebiliriz. Arada bir MS Access içinde F5 ile
yenilemeyi unutmayalım. Yoksa yine güncellemeler gözükmeyebilir.
Birinci
uygulamamız için son olarak da seçili satırdaki istediğimiz herhangi bir
sütununun içerisindeki veriyi nasıl dönderebiliyoruz buna bakalım ve ikinci
uygulamamıza geçelim. Seçili satırdaki
sütun verilerini döndermek Form Application daki gibi olmadığından bunu
öğrenmem oldukça zor oldu. Ancak sonuçta öğrenmiş bulunuyorum. Şimdi aşağıda
seçili satırdaki yazar sütunundaki veriyi MessageBox ile ekrana yazdıralım.
Kodlarım aşağıdaki gibi ;
private void
grd_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
// Aşağıdaki kodlar ile seçili satırdaki istediğim bir sütun
verisine erişebiliyorum.SelectedItems[0] olmalı
DataRowView row =
(DataRowView)grd.SelectedItems[0];
string sec = row["yazar"].ToString();
MessageBox.Show(sec);
}
|
Seçili
satırdaki sütun bilgisini de dönderdiğimize göre ilk uygulamamızı burada
sonlandıralım. İkinci uygulamamıza diğer yazımızda devam edeceğiz. Diğer
yazımızda sql cümleleri
kullanarak bu işlemler nasıl yapılıyor buna göz atacağız. İkinci uygulama için
aşağıdaki linke tıklayarak gidebilirsiniz.
Bu
uygulamanın projesini diskten paylaşıyorum isteyenler göz atabilirler.
0 yorum:
Yorum Gönder