Merhabalar…
Bu makalemde Silverlight ile veritabanı işlemleri-1 isimli makaleme devam ediyor olacağım. Yani oradaki veritabanını ve Silverlight projesini kullanıyor olacağım. Bugün veritabanındaki kayıtları datagrid üzerine nasıl ekleriz onu inceleyeceğiz. İlk olarak MainPage.xaml sayfamızın üzerine toolbox’tan bir DataGrid sürekleyip bırakıyoruz. Ardından silverlight ile veritabanı işlemleri-1 adlı makaledeki gibi bir WCF Service ekliyoruz ve ismini “KullanıcıGetir” şeklinde veriyoruz. KullaniciGetir.svc.cs dosyamızın içerisine aşağıdaki kodları yazıyoruz.
[C#]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
using System; using System.Collections.Generic; using System.Linq; using System.Runtime.Serialization; using System.ServiceModel; using System.Text; using System.ServiceModel.Activation;//bunu ekle namespace Ders_1.Web { [ServiceContract(Namespace = "")] [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] //satırında hata almamak için servicemodel.activation namespacesini ekliyoruz. public class KullaniciGetir { DataClasses1DataContext data = new DataClasses1DataContext(); [OperationContract] //satırını eklemeyi unutmayın... public List<KullaniciBilgileri>Getir() { var liste = (from kullanici in data.KullaniciBilgileris select kullanici); return liste.ToList<KullaniciBilgileri>(); } } } |
Burada veritabanımızdaki “KullaniciBilgileri” isimli tablomuzdaki tüm verileri bir liste halinde alıyoruz.
Ardından servisimizi referans olarak ekliyoruz tıpkı Silverlight ile veritabanı işlemleri-1 makalemde olduğu gibi. Bu işlemi de yaptıktan sonra sıra geldi MainPage.xaml.cs dosyamızın içerisine yazacağımız kodlara.Aşağıda dikdörtgen içerisine alınmış kodları sırasıyla yazıyoruz.
[C#]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Windows; using System.Windows.Controls; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Animation; using System.Windows.Shapes; using System.Collections.ObjectModel;// ekledik namespace Ders_1 { public partial class MainPage : UserControl { KuEkle.KullaniciEkleClient servis = new KuEkle.KullaniciEkleClient(); KuGetir.KullaniciGetirClient servis2 = new KuGetir.KullaniciGetirClient(); public MainPage() { InitializeComponent(); Kullanici kullanici = new Kullanici(); LayoutRoot.DataContext = kullanici; servis2.GetirAsync(); servis2.GetirCompleted += new EventHandler<KuGetir.GetirCompletedEventArgs>(servis2_GetirCompleted); } void servis2_GetirCompleted(object sender, KuGetir.GetirCompletedEventArgs e) { dataGrid1.ItemsSource = e.Result; } private void LayoutRoot_BindingValidationError(object sender, ValidationErrorEventArgs e) { if (e.Action == ValidationErrorEventAction.Added) { (e.OriginalSource as Control).Background = new SolidColorBrush(Colors.Yellow);//hatalı ise textbox'ın arkaplan rengini sarı yapıyoruz. ToolTipService.SetToolTip((e.OriginalSource as TextBox), e.Error.Exception.Message); } if (e.Action == ValidationErrorEventAction.Removed) { (e.OriginalSource as Control).Background = new SolidColorBrush(Colors.White);//hatalı değilse textbox'ın arkaplan rengini beyaz yapıyoruz. ToolTipService.SetToolTip((e.OriginalSource as TextBox), null); } } private void btn_kaydet_Click(object sender, RoutedEventArgs e) { if (vs.HasDisplayedErrors == true) MessageBox.Show("Belirtilen hataları düzeltip tekrar deneyin."); else { servis.EkleAsync(txt_isim.Text, txt_soyisim.Text, (DateTime)dogumtarihi.SelectedDate, txt_dogumyeri.Text, txt_okul.Text, txt_bolum.Text, txt_telefon.Text); servis.EkleCompleted+=new EventHandler<KuEkle.EkleCompletedEventArgs>(servis_EkleCompleted); } } void servis_EkleCompleted(object sender, KuEkle.EkleCompletedEventArgs e) { if (e.Result == true) { MessageBox.Show("Kullanici Başarılı Bir Şekilde Eklendi."); servis2.GetirAsync(); servis2.GetirCompleted += new EventHandler<KuGetir.GetirCompletedEventArgs>(servis2_GetirCompleted); } else MessageBox.Show("Kullanıcı Eklenemedi!"); } } } |
Burada dikkatinizi çekmek istediğim bir kısım var. Kullanıcı başarılı bir şekilde eklendi mesajının verildiği en alttaki kod bloğuna bakmanızı istiyorum. Oradaki işlem veritabanı tablomuzdaki verileri almak için servisimizi çağırıyoruz. Peki ama neden orda da servisimizi çağırıyoruz ki? Başlangıçta çağırmıştık zaten. Sebebi şu; başlangıçta çağırdığımızda projemizi çalıştırdığımızda veritabanındaki mevcut kayıtları listeler. Peki ben yeni bir kayıt ekleyip bununda sayfayı yenilemeden datagrid içerisinde yer almasını istersem ne yapmam lazım? İşte bu işlemi yapmak için buradaki gibi kayıt işlemi başarılı bir şekilde uyarı verildikten sonra datagrid’e verileri yükle diyoruz yani kısaca verileri KullaniciGetir isimli servisimizle alıyoruz ve datagrid‘e ekliyoruz. Projemizin çalışır hallerini aşağıdan görebilirsiniz.
Yukarıdaki hali projemiz ilk çalıştığındaki halidir.Veritabanımızdaki mevcut kayıtları listeliyor.
Bilgileri girdikten sonra Kaydet butonuna basıyoruz. Bilgilerimizin başarılı bir şekilde veritabanına kayıt olduğuna dair mesajımızı aldık. Tamam’a tıkladıktan sonra kaydımızın datagrid’de görünmesi gerekiyor.
Sorunsuz bir şekilde sayfamızı yenilemeden eklediğimiz kaydımızı datagrid üzerinde görüyoruz.
Bir makalenin daha sonuna geldik. Umarım sizin için de faydalı olmuştur. Bir sonraki makalemde Silverlight ile veri güncelleme işlemlerinden bahsedeceğim.Görüşmek üzere…
Merhaba,
Neden datagrid içindeki alanlar karışık geliyor?
Merhaba, nasıl karışık geliyor?
Şöyle ki. Biz veritabanındaki tabloda alanları ID,Ad,Soyad,DogumTarihi,DogumYeri sıralaması ile yarattık. Ancak datagrid de ise tamamen alanlar farklı sıralanmış.
Datagrid üzerindeki sıralamayı değiştirmek istiyorsanız ya da kendinize özgü bir sıralama yapmak istiyorsanız datagrid column özelliklerini kendinize göre değiştirmeniz gerekiyor.
güzel çalışma ellerinize sağlık…
Koddaki “vs.” kısmını çözemedim orada hata veriyor içerikte yok gibi bişey diyor. Tşk..
Bahsetmiş olduğunuz vs. https://omurerdem.com/silverlight/silverlight-ile-veritabani-islemleri-1/ adresindeki makalemde de belirttiğim Validation konusunda kullandığım projenin devamını kullandım. Validation bölümü ile ilgili o kısım.
public MainPage()
{
InitializeComponent();
Kullanici kullanici = new Kullanici();
LayoutRoot.DataContext = kullanici;
servis2.GetirAsync();
servis2.GetirCompleted += new EventHandler(servis2_GetirCompleted);
}
Bu koddaki Kullanici kullanici = new Kullanici(); kullanıcı nedir çözemedim ?
Merhaba,
Bahsetmiş olduğunuz Kullanıcı sınıfı buradaki makalemde oluşturulmuştur. Validation kontrolü için geliştirmiş olduğum projeyi veritabanı uygulamaları için de kullandım. O nedenle makalelerin başlangıcından başlamanız daha doğru olabilir.