13 Şub 2009 Microsoft Visual Basıc 9.0 Kitabı Kategori: Yazılım Etiketler: Microsoft 4 Yorum Değerli dostum Memik Yanık yazmış olduğu kitaptan bir adet de bana hediye etti. Buradan ona bir kez daha teşekkürlerimi sunmak istedim. Kitabı henüz detaylı inceleme fırsatım olmadı ama eminim bir çok konuda işime yarayacaktır :)Kitap ile ilgili bilgiler,İster daha önce kod yazmış olun ister olmayın, ister daha önce Visual Basic hakkında bilgi edinmiş olun ister Visual Basıc bilginiz sıfır olsun; bu kitabı okuyarak .NET programcılığa ve Visual Basic hakkında uzmanlık düzeyinde bilgi sahibi olabilirsiniz. En kapsamlı Türkçe Visual Basic kitabı iddiası ile kaleme alınan bu kitabın bütün sayfaları ilk okumada anlaşılacak yalınlıktadır. Visual Studio .NET'in Program Geliştirme Ortamı Visual Basıc ile Programcılığa Giriş Konsol Uygulamaları Namespace Hazırlamak ve Kullanmak Değişken Tanımlamak ve Kullanmak Dizi Değişkenler Operatörler Blok Kontrol Deyimleri Tarih ve Zaman İşlemleri
12 Şub 2009 Silverlight Futbol Oyunu Kaynak Kodları Kategori: Yazılım Etiketler: FutbolSilverlight 0 Yorum Silverlight ile yazmış olduğum ilk oyun olan "Silver Goal" oyunun kaynak kodlarını aşağıdaki adresten indirebilirsiniz. Eğer oyunu inceleyip geliştirmeye devam ederseniz lütfen beni de haberdar edin. Hayatta her daim vurduğunuz gol derlediğiniz kod da success olsun :)Oyunun kaynak kodlarını indirmek için tıklayınız
30 Oca 2009 Silverlight DataGrid Kontrolü – Web Servisten Gelen Verinin Listelenmesi Kategori: Silverlight Etiketler: Silverlight 2 Yorum Merhaba arkadaşlar bu makalemiz de DataGrid kontrolüne web servisten gelen verileri bağlayıp DataGrid’in kolonlarını özelleştireceğiz.Konuya başlamadan önce eğer Silverlight’ta web servisleri ile uğraşmadıysanız Silverlight ile Web Servislerinin Kullanılması isimli makaleyi okumanızı öneririm. Örneğimizde AdventureWorks veritabanına bağlanıp, ProductionProduct tablosuna web servisi ile bağlanıp verileri gridimiz üzerinde görüntüleyeceğiz. İlk olarak yeni bir silverlight projesi oluşturalım. Oluşturduğumuz projeye bir web servis dosyası ekleyip içerisinde Product isimli bir sınıf yazalım. İçerisinde 5 adet property yer alacak. Web servisinde de veritabanından ürünleri getirecek bir List döndüren bir metot yazalım. publicclass Product{ public int ProductID { get; set; } public string Name { get; set; } public string Color { get; set; } public bool MakeFlag { get; set; } public DateTime SellStartDate { get; set; }}[WebService(Namespace = "http://tempuri.org/")][WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)][System.ComponentModel.ToolboxItem(false)]public class WebService1 : System.Web.Services.WebService{[WebMethod]public List<Product> GetProducts(){ List<Product> productList = new List<Product>(); SqlConnection cnn = new SqlConnection("server=.; database=AdventureWorks; uid=sa; pwd=sa12345"); SqlCommand cmd = new SqlCommand("Select ProductID, Name, Color, MakeFlag,SellStartDate from Production.Product", cnn); cnn.Open(); SqlDataReader dr = cmd.ExecuteReader(); while (dr.Read()) { productList.Add(new Product() { ProductID = dr.GetInt32(0), Name = dr.GetString(1), Color = dr.GetString(2), MakeFlag = dr.GetBoolean(3), SellStartDate= dr.GetDateTime(4) }); } return productList; }} Data tarafımız hazır. Şimdi de page.xaml’ı Expression Blend ile açalım ve bir DataGrid ekleyelim ve DataGrid üzerinde göstereceğimiz kolonları ayarlayalım. <UserControl xmlns:basics="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls" xmlns:data="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data" x:Class="SilverlightToolkits.Page" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Width="700" Height="400"><Gridx:Name="LayoutRoot" Background="White"> <data:DataGrid Margin="8,8,8,8" x:Name="grid" AutoGenerateColumns="False"> <data:DataGrid.Columns> <data:DataGridTextColumn IsReadOnly="True" CanUserResize="False" CanUserSort="True" CanUserReorder="False" Binding="{Binding ProductID}" Header="Ürün ID"/> <data:DataGridTextColumn Binding="{Binding Name}" Header="Ürün Adı"/> <data:DataGridTextColumn Binding="{Binding Color}" Header="Renk"/> <data:DataGridCheckBoxColumn Binding="{Binding MakeFlag}" Header="MageFlag"></data:DataGridCheckBoxColumn> <data:DataGridTemplateColumn Header="Tarih"> <data:DataGridTemplateColumn.CellTemplate> <DataTemplate> <TextBlock Text="{Binding SellStartDate}"></TextBlock> </DataTemplate> </data:DataGridTemplateColumn.CellTemplate> <data:DataGridTemplateColumn.CellEditingTemplate> <DataTemplate> <basics:DatePicker SelectedDate="{Binding SellStartDate, Mode=TwoWay}"></basics:DatePicker> </DataTemplate> </data:DataGridTemplateColumn.CellEditingTemplate> </data:DataGridTemplateColumn> </data:DataGrid.Columns> </data:DataGrid></Grid> </UserControl> DataGrid’in dizayn kısmını hallettik, şimdi de datayı getirecek kodları yazalım. İlk olarak servisin bir örneğini oluşturacağız. Sonrasında uygulama’nın Loaded event listenerini oluşturup servisten veriyi çekeceğiz. Son olarak da servisten gelen metodun completed even listenerini oluşturup gelen veriyi gride bağlayacağız. using SilverlightToolkits.ServiceReference1; // Eklemeyi unutmayalımWebService1SoapClient s = new WebService1SoapClient();public Page(){ InitializeComponent(); this.Loaded += new RoutedEventHandler(Page_Loaded); // yüklendiğinde çalışacak olan event s.GetProductsCompleted += new EventHandler<SilverlightToolkits.ServiceReference1.GetProductsCompletedEventArgs>(s_GetProductsCompleted); // Serviste kullandığımız metodun sonucu geldiğinde çalışacak olan event}void s_GetProductsCompleted(object sender, SilverlightToolkits.ServiceReference1.GetProductsCompletedEventArgs e){ grid.ItemsSource = e.Result; // Sonucu gride bağladık} void Page_Loaded(object sender, RoutedEventArgs e){ s.GetProductsAsync(); // Servise çağrıda bulunduk} Test edelim Verilerimizi gride çektik. Tarih alanında herhangi bir yere tıklarsak takvimin çıktığını görüyoruz. Makalenin sonuna geldik, başka bir makalede görüşmek dileğiyle. .NET ve Silverlight ile kalın ;) Sem GÖKSU www.semgoksu.com | www.yazilimgunlugu.com sem.goksu@yazilimgunlugu.com Kaynaklarmsdn.comsilverlight.net
30 Oca 2009 Silverlight DataGrid Kontrolü - Kolon Yapıları Kategori: Silverlight Etiketler: Silverlight 0 Yorum Merhaba arkadaşlar, bu makalemizde silverlight 2.0 ile birlikte karşımıza çıkan DataGrid kontrolünün kolon yapılarını ve özelliklerini inceliyeceğiz.Silverlight DataGrid kontrolünde üç adet kolon template’i var. DataGridTextColumnDataGridCheckboxColumnDataGridTemplateColumn DataGridTextColumn kolon tipi ile adında anlaşılacağı gibi text olarak verilerin gösterilmesini ve düzenlenebilmesini sağlıyor. DataGridTextColumn web ve windows kontrollerinde kullandığımız BoundField’lara benzer bir yapıdadır. Çeşitli özellikleri vardır. Bu özelliklerden bazılarını inceleyelim. CanUserResizeBu özellik kolonun yeniden boyutlandırılabilmesini sağlar. True ve false değeri alabilir. Default değeri true’dır.CanUserSortBu özellik kolona göre verinin sıralanabilmesini sağlar. True ve false değeri alabilir. Default değeri true’dır.CanUserReorderBı özellik kolonun yerininn değiştirlebilmesini sağlar. True ya da false değeri alır. Default değeri true’dır.BindingBu özellik kolon da gösterilecek olan veriyi bağlayabilmemizi sağlar. Örn; Binding="{Binding Name}"HeaderBu özellik kolon’un başlığını belirlememizi sağlar. IsReadOnlyBu özellik ile kolonun içerisindeki verinin salt okunur olup olmayacağı ayarlanır. True yada false değerleri alabilir. Varsayılan değeri true’dır. Kolon yapısını inceleyecek olursak, <data:DataGrid Margin="8,8,8,8" x:Name="grid" AutoGenerateColumns="False"> <data:DataGrid.Columns> <data:DataGridTextColumnIs ReadOnly="True" CanUserResize="False" CanUserSort="True" CanUserReorder="False" Binding="{Binding ProductID}" Header="Ürün ID"/> </data:DataGrid.Columns></data:DataGrid> Yukarıda kolonumuzu XAML’den ekledik. Peki kolonumuzu dinamik olarak yani run-time da eklemek istersek Ne yapacağız? Aslında oldukça basit. DataGrid’in columns isimli bir koleksiyonu var. Runtime da yeni bir kolon oluşturup Columns koleksiyonuna ekleyebiliyoruz. DataGridTextColumn yeniColon =new DataGridTextColumn();yeniColon.Header = "Yeni Kolon";yeniColon.Binding = new Binding("YeniKolondaGorutulenecekAlan");DataGrid1.Columns.Add(yeniColon); DataGridCheckboxColumn’ları da true ya da false değerlerini listelemek için kullanacağımız kolon tipidir. DataGridTextColumn kolon tipinin yukarıda bahsettiğimiz özellikleri DataGridCheckboxColumn ile ortaktır. XAML kodunu inceleyecek olursak, <data:DataGrid Margin="8,8,8,8" x:Name="grid" AutoGenerateColumns="False"> <data:DataGrid.Columns> <data:DataGridCheckBoxColumn Binding="{BindingProperty}" Header="Baslik"></data:DataGridCheckBoxColumn> </data:DataGrid.Columns></data:DataGrid> Runtime’da yazdığımız kod ile eklemek istersek, DataGridCheckBoxColumn yeniCheckBoxColon = new DataGridCheckBoxColumn();yeniCheckBoxColon.Header = "Yeni Kolon";yeniCheckBoxColon.Binding = new System.Windows.Data.Binding("YeniKolondaGorutulenecekAlan");grid.Columns.Add(yeniCheckBoxColon); DataGridTemplateColumn kolonu ise içlerinde en çok özelleştirilebilir kolon tipidir. İçerisinde Content tipinde bir özellik olduğu için içerisine istediğimiz şeyi atabiliriz. Örneğin DateTime tipinde bir Property’miz var. Bu Property’nin değerimi kullanıcıya kolon içerisinde DatePicker kontrolü ile gösterebiliriz. 2 çeşit template modu bulunuyor. CellTemplate, CellEditingTemplate. CellTemplate kolonun normal şartlardaki görüntüsünü bize verirken, CellEditingTemplate veriyi düzenlemek istediğimiz de karşımıza çıkacak. Yukarıdaki örneğe dönersek, Kullanıcıya DateTime tipindeki veriyi gösterirken CellTemplate, kullanıcı veriyi değiştirmek istediğin de ise CellTemplateEditing Template’ni gösterebiliriz. <data:DataGridTemplateColumn.CellTemplate><DataTemplate> <TextBlock Text="{Binding Tarih}"></TextBlock></DataTemplate></data:DataGridTemplateColumn.CellTemplate> Veriyi listelerken yukarıdaki gibi bir yapıyı kullanıyoruz. Güncellerken farklı kontrolleri de kullanıcıya gösterebiliriz. Bunun için kullanmamız gereken gereken CellEditingTemplate özelliğidir. Burada dikkat etmemiz gereken bir diğer özellik Binding özelliğinin Mode özelliğidir. Mode özelliğini TwoWay olarak belirttiğimizde List verimizin de güncellenmesini sağlıyoruz. <data:DataGridTemplateColumn Header="Tarih"> <data:DataGridTemplateColumn.CellTemplate> <DataTemplate> <TextBlock Text="{Binding SellStartDate}"></TextBlock> </DataTemplate></data:DataGridTemplateColumn.CellTemplate><data:DataGridTemplateColumn.CellEditingTemplate> <DataTemplate> <basics:DatePicker SelectedDate="{Binding SellStartDate ,Mode=TwoWay}"></basics:DatePicker> </DataTemplate></data:DataGridTemplateColumn.CellEditingTemplate></data:DataGridTemplateColumn> Run-Time da yani kolonları dinamik olarak eklemek istersek durum biraz karışık gibi görünüyor rünüyor JBunun için kullanılabilecek iki yöntem var. ReSources oluşturmak ve XAMLReader kullanmak. İlk olarak XAML tarafında ReSources oluşturalım. (Not: Resources, UserControl içerisinde bir dependency property’dir.) ReSources ile kolonların içerisine dinamik olarak DataTemplate ekleyebilmek için DataTemplate’lar oluşturabiliyoruz. <UserControl.Resources> <DataTemplate x:Key="DuzenleninceGorutulenecekKisim"> <TextBox Text='{Binding SellStartDate, Mode=TwoWay}' /> </DataTemplate> <DataTemplate x:Key="GorunecekKisim"> <TextBlock Text="{Binding SellStartDate}"></TextBlock> </DataTemplate></UserControl.Resources> Şimdi kod tarafına geçip templatefield’ı oluşturabiliriz. XAML’de Resources’e bir key vermiştik. Oluşturduğumuz DataGridTemplateColumn’ın CellTemplate ve CellEditingTemplate özelliklerine Resources’daki oluşturduğumuz DataTemplate’leri atadık. Custom templateleri dinamik olarak oluşturmak istediğimiz de bu şekilde DataTemplate’ler oluşturmak zorundayız. DataGridTemplateColumn template = new DataGridTemplateColumn();template.CellTemplate = Resources["GorunecekKisim"] as DataTemplate;template.CellEditingTemplate = Resources["DuzenleninceGorutulenecekKisim"] as DataTemplate;template.Header = "Tarih";grid.Columns.Add(template); Aynı işlemi XamlReader ile de yapabiliyoruz. Bunun için Resources da tanımladığımız gibi string olarak DataTemplate oluşturacağız. usingSystem.Windows.Markup; // Eklemeyi unutmayalımDataGridTemplateColumn tColumn = new DataGridTemplateColumn();tColumn.Header = "Tarih";StringBuilderkolonXaml = new StringBuilder();kolonXaml.Append("<DataTemplate xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\" xmlns:local= \"clr namespace:System.Windows.Controls;assembly=System.Windows.Controls\"><TextBlock Text = \"{Binding SellStartDate}\"/></DataTemplate>");tColumn.CellTemplate = (DataTemplate)XamlReader.Load(kolonXaml.ToString());kolonXaml.Append("<DataTemplate xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\" xmlns:local= \"clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls\"><TextBox Text='{Binding SellStartDate, Mode=TwoWay}' /></DataTemplate>");tColumn.CellEditingTemplate = (DataTemplate)XamlReader.Load(kolonXaml.ToString());grid.Columns.Add(tColumn); XAMLReader.Load Metodu ile String olarak oluşturduğumuz XAML kodu okunur ve geriye objenin tipine uygun sonuç döner.ç döner. Makalenin sonuna geldik, başka bir makalede görüşmek dileğiyle. .NET ve Silverlight ile kalın ;) Sem GÖKSUwww.semgoksu.com| www.yazilimgunlugu.comsem.goksu@yazilimgunlugu.com Kaynaklarmsdn.comsilverlight.net