Ana içeriğe atla

WPF - DataGrid Pratikleri - II

Windows Presentation Foundation ile uygulama geliştirirken kullanabileceğimiz kontrol paleti işlerimizi rahatlıkla yürütebileceğimiz kadar geniştir. Araç kutusu içerisinde yer alan kontroller Framework sürümünü arttırdıkça ve codeplex, code.msdn gibi sitelerde yer alan projeler yardımı ile daha da artmaya devam etmektedir. WPF 'in grafiksel ve görsel gücüne günlük yaşantı da kullanılan kontrollerin de kullanılabilir olması sayesinde en basit uygulamalardan en karmaşık uygulamalara kadar geliştirilebilme olanağı tanınıyor.

Windows Presentation Foundation ile ilgili kontrolleri özellikle de .Net Framework 4.0 ile çok daha sık kullanacak olduklarımızı incelmeye devam ediyoruz. Bir önceki yazımızda WPF DataGrid kontrolünün nasıl kullanabileceğini ve özelliklerinden nasıl yararlanabileceğimizi anlatmaya çalışmıştık. Bu yazımızda yine DataGrid kontrolünü incelerken detaylı bir şekilde proje geliştirme esnasında DataGrid kontrolünü nasıl kullanabileceğimizi açıklamaya çalışıyor olacağız.

Son kullanıcıya veri göstermek istenildiğinde akla gelen ilk kontrollerdendir DataGrid kontrolü. Asp.Net uygulamalarında DataGrid, Windows Form uygulamalarında DataGridView kontrolü olarak geçmektedir. Ayrıca üçüncü parti kontrol geliştiren yazılım firmalarınında ilk olarak değindikleri ve özelleştirdikleri kontroldür. Bu durumda bu kontrolün WPF ilk çıktığı zamanlarda bileşen panelinin içerisinde yer almaması oldukça büyük bir eksiklik olarak hissediliyordu. .Net Framework 3.5 'in SP1 sürümünün çıkması ve sonrasında WPF Toolkitin iyice kullanılabilir hale gelmesi ile WPF için yeni yeni kontroller geliştiricilere sunulmaya başladı. Bu geliştirilen kontrollerden şu anda için en sık kullanılan DataGrid, DateTimePicker ve Calendar kontrolleri özelleştirilebilir halleri ile .Net Framwork bünyesine de eklenmiştir. Zaman içerisinde kontrol panelinin içeriğinin artacağından kimsenin şüphesi yoktur.

DataGrid kontrolünün temel özelliklerini ve DataSet yardımı ile veri tabanı işlemlerimizi nasıl yapabileceğimizi incelemiştik. Şimdi ise LinqToSQL ile DataGrid üzerinde CRUD işlemlerinin nasıl yapabileceğimize göz atıyor olacağız. Bu işlemler için olarak bir WPF projesi açıyor ve sonrasında LinqToSQL Modeli projemize ekliyoruz.

LinqToSQL denilince akla Nesne ilişkili tasarım (Object Relation Designer) kelimeleri akla gelmektedir. Alışagelmiş olduğumuz SQL sorgularının aksine nesne olarak INummrable, IQueryble ve diğer ilişkisel arayüzleri taban alınarak hazırlanmış kullanımı çok kolay bir veri modelidir. Bizde bu kolaylıktan yararlanabilmek için projemizde LinqToSQL kullanıyoruz.

Projemiz oluştu ve LinqToSQL Classes 'i projeye ekliyoruz.



Veri modelini projeye ekledikten sonra Microsoft 'un SQL örnek veritabanlarından Northwind 'den yararlarak Customers tablosunu ekliyoruz.


Bu işlemi gerçekleştirdikten sonra projeyi bir kez derliyoruz. Sonrasında sıra verileri gösterecek olduğumuz DataGrid kontrolüne geldi. Eğer ki VS2008 SP1 kullanıyorsanız CodePlex sitesi üzerinden indirmiş olduğunuz WPF Control Toolkit içerisinde yer alan WPFToolkit.dll 'i projeye referans ediyoruz. Eğer ki VS2010 kullanıyorsanız ise bu işlemi yapmanıza gerek yoktur. Çünkü .NET Framework 4.0 bünyesinde WPF DataGrid kontrolü yer almaktadır.

DataGrid kontrolünü proje içerisinde kullanılabilir duruma getirdikten sonra Customer tablosunun içeriğini grid içerisinde gösterilecek şekilde ekliyor ve sonrasında düzenleme ve silme işlenin yapılabilmesi için DataGrid 'in template column özelliğinden yararlanıyoruz.

DataGrid.xaml
<Button Content="Kullanıcıları Yükle" Name="LoadButton" VerticalAlignment="Top" Click="LoadButton_Click"/>
<DataGrid AlternationCount="2" SelectionMode="Single" AutoGenerateColumns="False" Height="252" HorizontalAlignment="Left" Margin="0,31,0,0" x:Uid="dataGrid1" x:Name="dataGrid1" VerticalAlignment="Top"    Width="584">
    <DataGrid.Columns>
        <DataGridTextColumn Binding="{Binding Path=CustomerID}" IsReadOnly="True" Header="CustomerID" Width="SizeToHeader"/>
        <DataGridTextColumn Binding="{Binding Path=CompanyName}" Header="Company" Width="SizeToHeader" />
        <DataGridTextColumn Binding="{Binding Path=ContactName}" Header="Name" Width="SizeToHeader" />
        <DataGridTextColumn Binding="{Binding Path=City}" Header="City" Width="SizeToHeader" />
        <DataGridTextColumn Binding="{Binding Path=Country}" Header="Country" Width="SizeToHeader" />
        <DataGridTextColumn Binding="{Binding Path=Phone}" Header="Phone" Width="SizeToHeader" />
        <DataGridTemplateColumn Header="Düzenleme">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <Button Content="Düzenle" Click="EditButton_Click"/>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
        <DataGridTemplateColumn Header="Sil">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <Button Content="Sil" Click="DeleteButton_Click"/>
                 </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
    </DataGrid.Columns>
</DataGrid>

XAML üzerindeki değişiklikleri tamamladıktan sonra şimdi kod tarafında kullanıcıları doldur butonuna tıklanıldığı zaman gerçekleşecek olan işlemleri ayalarlayalım.

DataGrid.xaml.cs
private void LoadButton_Click(object sender, RoutedEventArgs e)
{
    LoadCustomer();
}

private void LoadCustomer()
{
    DataClasses1DataContext cd = new DataClasses1DataContext();
    var customers = (from p in cd.Customers select p).Take(10);
    dataGrid1.ItemsSource = customers;
    LoadButton.Content = "Kullanıcılar Yüklendi";
}

Yapmış olduğumuz işlemler sonrasında artık LinqToSQL yardımı ile veri tabanından kullanıcı bilgilerini getirerek gird üzerinde gösterebiliriz. Test etmek gerekirse sonuç aşağıdaki gibi olacaktır.



Şu ana kadar herşey istediğimiz gibi ilerlemektedir. Şimdi yapacak olduğumuz işlem ise seçilen bir kayıtın düzenlenmesi olacaktır. Bunun için en gerekli bilgi seçilmiş olan satırdaki CustomerID 'ye erişmek olacaktır. Diğer işlemler ise alışık olduğumuz seçilen kaydın ID 'sinden yararlanarak güncelleme işlemlerinin yapılması olacaktır.

DataGrid.xaml.cs
private void EditButton_Click(object sender, RoutedEventArgs e)
{
    try
    {
        DataClasses1DataContext dataContext = new DataClasses1DataContext();
        Customer customerRow = dataGrid1.SelectedItem as Customer;
        string m = customerRow.CustomerID;
        Customer customer = (from p in dataContext.Customers where p.CustomerID == m select p).Single();
        customer.CompanyName = customerRow.CompanyName;
        customer.ContactName = customerRow.ContactName;
        customer.Country = customerRow.Country;
        customer.City = customerRow.City;
        customer.Phone = customerRow.Phone;
        dataContext.SubmitChanges();
        MessageBox.Show("Satır Güncellenmiştir");
        LoadCustomer();
    }
    catch (System.Exception ex)
    {
        MessageBox.Show(ex.Message);
        return;
    }
}

Artık DataGrid üzerinden veri güncelleyebilir duruma gelmiş bulunuyor. LinqToSQL kullanırken veri içerisinde yer alan değişiklikler için SubmitChanges metodunu kullanmak gerekmektedir. Test etmek gerekirse sonuç aşağıdaki gibi olacaktır.



Son olarak silme işlemini nasıl yapabileceğimizi inceleyeceğiz. Yine seçili olan satırın CustomerID 'sinden yararlanarak silme işlemini gerçekleştireceğiz.

DataGrid.xaml.cs
private void DeleteButton_Click(object sender, RoutedEventArgs e)
{
    DataClasses1DataContext cd = new DataClasses1DataContext();
    Customer customerRow = dataGrid1.SelectedItem as Customer;
    var customer = (from p in cd.Customers where p.CustomerID == customerRow.CustomerID select p).Single();
    cd.Customers.DeleteOnSubmit(customer);
     cd.SubmitChanges();
    MessageBox.Show("Satır silinmiştir.");
    LoadCustomer();
}

DataGrid üzerinde silme işlemini de başarı ile gerçekkleştirdik. LinqToSQL ile seçilmiş olan CustomerID yardımıyla veri tabanından kaydın silinmesine olanak tanıdık.

Sonuç olarak bu yazımızda basit olarak LinqToSQL yardımı ile ve WPF DataGrid kullanılarak temel CRUD işlemlerini nasıl yapabileceğimizi incelemeye çalıştık.

Umarım yararlı olabilmiştir.

Yorumlar

Bu blogdaki popüler yayınlar

Olasılıksız - Kitap Yorum

Olasılıksız hayatımda okuduğum en iyi kitaptı. Tek çırpıda hiç sıkılmadan, eğlenerek okudum bu kitabı, tavsiyem sizinde okumanız.Kitabın kapağı ve içeriği ile ilgili kısa bilgi aşağıdadır.Olasılık, tahmin, düşünceler, nöbetler, karışıklıklar, ileriyi görebilme zannı, dejavu ve tabii ki olasılıksız şeyler. Bu kelimelerle içli dışlı olabileceğiniz, bütün bu kelimelerin yaşamdaki yerini kavrayabileceğiniz müthiş bir uyarlama.Adam Fawer' ın ortaya çıkardığı bu uyarlama romanın müthiş bir çalışmanın ve araştırmanın sonucu ortaya çıktığının kitabın başından sonuna kadar farkındasınız. Bu uyarlamasını, derin araştırmalarıyla birleştirip romanı tekdüzelikten çıkarıp müthiş bir yere koyduğu için de Fawer' a müteşekkir oluveriyorsunuz. Sıkıcı diye nitelendirebileceğiniz teorik bilgileri bile bir çırpıda okuyuveriyorsunuz. Teorik bilgiler dahi olaylarla sonuna kadar bağlantılı aktarılmış. Tekdüzelikten çıkmış bir roman; olasılıksız. Her an olayın kurgusunun değişmesi olasılık dahilinde. …

.Net 3.5 SP1 – Full Install Packages (Tam Kurulum)

.Net Framework 3.5 SP1 ‘i bilgisayarınıza kurmak istediğinizde normal şartlar altında Microsoft ‘un sitesinde 2.7 mb ‘lik bir dosya indirir ve kurulum işlemlerinizi bu dosya üzerinden yaparsınız. Ancak bu indirmiş oluğunuz dosya yaklaşık 220 mb ‘lik veriyi internetten indirerek kurulum yapmaktadır. İnternet çıkışına izin verilmeyen kurumlar ve kuruluşlar için bu durum bir sıkıntı oluşturmaktadır. Bu sebepten ötürü aşağıdaki link yardımı ile tam yükleme paketini indirdikten sonra hiç internet ihtiyacınız olmadan .Net 3.5 SP1 ‘i kurabilmeniz mümkün olacaktır.Link

Çoklu Dil Desteği – Veri Tabanı Tasarım Örnekleri ile

Zaman içerisinde karşımıza çok farklı projeler gelebilmektedir. Ancak bu projeler içerisinde özellikle de global ölçekli ya da bu ölçekte uygulama geliştiren firmalarda bazı temel gereksinimler sürekli olarak karşımıza çıkabilmektedir. Bu gereksinimlerden biri ve belki de en önemlisi olan çoklu dil desteğinin veri tabanı (DB) katmanında nasıl yapıldığını kısa ve hızlıca inceliyor olacağız.Öncelikle çoklu dil desteği dediğimizde aklımıza gelen ilk çözüm yolu *.resx dosyalarını kullanmak gelmektedir. Ancak bu uzaktan yönetilen ya da anlık olarak metin değişikliği gereksinimi bulunan uygulamalarda bazı ufak problemler çıkartabilmektedir.Ne gibi problemler derseniz; iki grupta inceleyebiliriz. Web projeleri ve windows üzerinde çalışan projeler.Web projelerinde IIS üzerinde yer alan bir *.resx dosyasını değiştirdiğinizde son kullanıcı tarafında etkisi hemen görülmeyebilir. Cache mekanizmaları sebebiyle ortalama 15-30 dakika arasında bir görüntüleme süre farkı ile karşılaşabiliriz. Faha köt…