14 Şubat 2014 Cuma

WPF DataGrid


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