Asp.Net ile birlikte gelen Profile Api’si bir çok açıdan web sitelerimizi kişileştirmede kolaylık sağlıyor. Bazı temel şeyler için Session nesnesini kullanmak yerine Profile nesnesi ile kolaylıkla kişileştirme işlemlerini yapabiliyoruz. Ancak Visual Studio 2005 ve 2008 versiyonlarında bulunan Web Application modeli ile yeni bir web uygulaması yapmaya çalıştığımızda Profile nesnesini kullanmak Web Site projelerindeki kadar kolay olmuyor. Bunun nedeni Web Application modeli ile değişen derleme olayı.

Web Site şeklinde bir projede Profile için gerekli ayarları web.config’de yaptığınız zaman, Visual Studio ProfileCommon diye,ProfileBase’den türeyen bir sınıf oluşturur ve intellisense de Profile nesnesi olarak bu sınıfa ulaşabiliriz. Bu sınıf web.config’de yapmış olduğumuz Profile özelliklerini barındırır. Bu sayede kodlama yaparken bunlardan kolayca yararlanabiliriz. Ama web application tarzı projelerde bu şekilde olmaz. Çünkü Visual Studio ProfileCommon sınıfını yaratmaz. Bunun nedeni web application tipindeki projelerdeki item’ların tek tek derleniyor olması ve bir birinden bağımsız olarak çıkması.

Ama tabi ki bu Web Application tarzı projelerde Profile Api’sini kullanamayacağımız anlamına gelmiyor. Profile nesnesi,yukarıda da bahsettiğim gibi ProfileBase sınıfından türüyor. HttpContext.Current.Profile şeklinde bu ProfileBase sınıfına ulaşabilirsiniz.

ProfileBase p = (ProfileBase)HttpContect.Current.Profile;

p["Firstname"] = “Arda”;

p["Lastname"] = “Çetinkaya”;

şeklinde web.config’deki profile özelliklerine ulaşabilirsiniz. Profile Api’sinin kullanımı hakkında http://www.csharpnedir.com/makalegoster.asp?MId=644 adresindeki Burak Selim Şenyurt’un makalesine de göz atmanızı tavsiye ederim.

WPF ve DataBinding

Posted by Arda under .NET, C#, Coding

.NET Framework 3.0 ile beraber gelen alt bileşenlerden Windows Presentation Foundation uzaktan güzel gözüksede sanırım uygulama geliştirme aşamasında bir çok yazılım uzmanını zorlayan yapılardan biri. Bunun öncelikli nedenleri, henüz stabil bir uygulama geliştirme platformunun tam olarak sunulmaması ve dökümantasyonun yeterli olmaması gösterilebilir sanırım. WPF vizyonu yaygınlaştıkca dökümantasyon olayınında gelişeceğine inanıyorum.
 
Bu yazımda WPF’da databinding işlemlerinden bahsedeceğim. Önceki framework versiyonlarından farklı bir yaklaşıma sahip olan databinding işlemleri WPF’da gerçekten oldukça karışık. Bunun nedenlerinden biri kontrolleri bir birleri ile iç içe kullanabilme özelliğinin ve her bir kontrolü özelleştirme esnekliliğinin çok gelişmiş olması desem yanılmış olmam. WPF’da bir listbox’ın içine koyacağınız düğme üzerine tıklandığı zaman bir combobox’ın çıkıp,elemanlarını değişik türlerde gösterebilme esnekliği, geliştirme aşamasında baya zorluyor.

Bu yazı ile bu WPF’de kontrollere databinding nasıl yapılır giriş seviyesinde bunu anlatacağım. Yazının biraz daha net anlaşılması için XAML kavramı ve .NET Framework 3.0 konseptine yatkınlın sanırım gerekli olacaktır. Yapacağım örnek, bir combobox’ı database’den gelen bilgiler ile nasıl doldurabilir ve combobox’ın elemanlarını nasıl özelleştirebiliriz bunu gösteren basit bir uygulama olacak.

Read the rest of this entry »

Ajax Extensions 1.0 ile gelen ve sanırım en çok kullanılan kontrol olan UpdatePanel’den biraz bahsetmek istiyorum. Kendi yaptığım uygulamalarda oldukça sık kullanıyor olmam böyle bir yazı yazmam için beni tetikledi. Tetikledi derken, trigger mantığından da biraz bahsedeceğimi söylemek isterim. Bu yazıda basit bir UpdatePanel örneği ve bu UpdatePanel’i dışarıdan başka bir kontrol ile nasıl tetikleriz bundan bahsedeceğim. Umarım bir şekilde işinize yarayan bir şeyler olmuşmasını sağlar. Yapacağımız şey oldukça basit bir örnek olacak; RadioButtonList’den seçtiğimiz elemanlara göre UpdatePanel içindeki ASP.NET kontrolünü güncelleme.
Read the rest of this entry »

Subsonic 2.0.3 çıktı

Posted by Arda under .NET, C#, Coding, Technology

Daha önceki yazılarımdan bir tanesinde SubSonic diye bir DAL(Data Access Layer) generator’dan bahsetmiştim. Yeni sürümü çıkmış, bir çok bug düzeltilmiş. Açıkcası daha test etme imkanı bulamadım ama takip edenler varsa duyurulur…

http://www.codeplex.com/actionpack ve http://subsonicproject.com/ adreslerinden aytıntıları öğrenebilirsiniz.

WPF ile ilk uygulama…

Posted by Arda under .NET, C#, Coding

WPF(Windows Presentation Foundation) ile ilgili ilk yazıda, basit bir giriş yapmıştım. Girişten çok aslında biraz daha tanıtım bir amaçlı yazıydı. Şimdi yavaş yavaş, WPF geliştirme ortamlarını da kullanarak daha güzel bir giriş yapmayı hedefliyorum.

Öncelikle WPF uygulamaları geliştirmek için bir kaç yükleme yapmanız gerekmekte. .NET 3.0 Framework Runtime bileşenleri, Windows SDK ve WPF için Visual Studio 2005 bileşenleri. Bu üç yükleme işleminden sonra WPF uygulamaları geliştirmeye başlayabilirsiniz. .NET 3.0 Runtime’ı release olmuş durumda, o yüzden bu kurulumda sorun yaşayacağınızı düşünmüyorum, aynı şey Windows SDK’sı içinde geçerli. Ancak VS 2005 için gerekli olan WPF bileşenleri henüz CTP kıvamında. Ancak tabi ki çalışır ve oldukça sorunsuz. Bu yüklemelerden sonra artık WPF uygulamaları geliştirmeye başlayabiliriz.
Read the rest of this entry »

EVENT ve DELEGATE

Posted by Arda under .NET, C#, Coding

Nedir bu Event?
Event, olay,hadise,vaka,aktivite olarak çeşitli Türkçe kelimeler ile tanımlanabilir. Bir programda da aslında tam olarak böyle. Event, bir programın belli bir aktivitesi olarak adlandırabiliriz. Event’lerin gerçekleşmesini sağlayan çeşitli durumlar vardır,bu durumlara tetik diyoruz. Kısaca olayların gerçekleşmesi için onların tetiklenmesi gerekir. Basit bir örnek ile olayı biraz daha özetlesem sanırım daha anlaşılır olur. Şimdi bir alarm yönetim sistemi var diyelim.Çeşitli yerlerdeki alarmları kontrol ediyor olsun. Bu çeşitli yerlerden biri bir banka olsun. Gece geç saatlerde bu bankaya bir hırsız girsin(tetik) ve alarmın çalışmasına neden olsun. Alarm yönetim sistemine giden bu alarm  da bize nerede,saat kaçta olayın olduğunu bildirsin. Biraz daha programcılık terimleri ile olaya başka açıdan bakalım şimdi. Şimdi bankaya biri girdiğinde haberdar olmak istiyoruz.HIRSIZGIR() diye bir metod  olsun,ve hırsızın bankaya girme metodu olsun.Hırsızın bankaya girme olayı gerçekleştiği zaman ALARMCAL() methodu çalışsın ve bize haber versin. Bu işi ALARMCAL() metodunu, HIRSIZGIR() metodu ile ilişkilendirerek yapabiliyoruz. Ve bu şekilde HIRSIZGIR() çalıştığı zaman ALARMCAL() metodu tetiklenmiş olacak. Umarım bu örnek olayın biraz anlaşılması için yeterli olur,gerçi aşağıda program koduyla bazı şeylere daha net deyiniyor olacağım. Bu konuda bahsedilmesi gereken bir diğer kavram ise delegate(delege,temsilci) metodlar.  Object Oriented Programming kavramının ana taşlarından biri olan data encapsulation, açısından bakarsan delegate metodlar içinde method encapsulation diyebiliriz. Biraz daha anlaşılır olması için, delegate(temsilci) metodların, başka metodları temsil etmesi olarak basit bir cümle kurabilirim. Delegate metod, temsil ettiği başka bir metodun çalışmasını sağlar. Bu şekilde bir nesne içindeki metodların içeriklerinin biraz olsun gizlenmesi sağlanabilir. Şimdi biraz kod üzerinden gidelim. class AlarmEventArgs : EventArgs {         private string place;         private string time;         public AlarmEventArgs(string p,string t)         {             place = p;             time = t;         }         public String Place         {             get { return place; }         }         public String Time         {             get { return time; }         } } Üstteki kodda System.EventArgs’yi kullanarak kendi EventArguments’ımızı yaratıyoruz. Bu belirlediğimiz event gerçekleştiği zaman bize döndürecek argümanları belirleyebiliyoruz. Kendi  EventArguments’larımızı yazma gibi bir zorunluluğumuz yok aslında ama ben genellikle tercih ediyorum.

public class Alarm {         //Event'in tetiklenmesini sağlayacak olan delegate metodunu tanımlıyoruz.         //Tanımlama sırasında metod içinde bir işlevine dair hiç bir şey yazmıyoruz.         //Parametre olarakda bu Event'i tetiklenen obje ve parametreleri tanımlıyoruz.         public delegate void AlarmEventHandler(object sender, AlarmEventArgs e);         //Yukarıda tanımladığımız delegate methodu tipinde bir event tanımlıyoruz.                 public event AlarmEventHandler AlarmEvent;                 public void Active(string p,string t)         {             AlarmEventArgs args = new AlarmEventArgs(p, t);             AlarmEvent(this, args);                     }          }Burada delegate metodumuzu tanımlıyoruz.Alacağı parametreleride belirtikten sonra da, event’i de tanımlıyoruz. Dikkat ederseniz event’in  döndüreceği bilgi olarak delegate metodumuzu yazıyoruz. Yani event’i bir method ile ilişkilendiriyoruz burada. Bence  Event ve Delegate konularında en önemli ve dikkat edilmesi gereken yer burası.

public static void Main() {         Alarm a = new Alarm();         //Event sonuçunda çağıralacak metodu temsilci metoda tanıtıyoruz.         a.AlarmEvent += new Alarm.AlarmEventHandler(a_AlarmEvent);         a.Active("Banka", "02:34");         a.Active("Market", "23:04");  }  //Event gerçekleştiği zaman çalışacak olan metod.  static void a_AlarmEvent(object sender, AlarmEventArgs e)  {         Console.WriteLine("Alarm is started in "+ e.Place+" at "+e.Time);  }Main fonksiyonu içinde gerekli tanımlamalardan sonra, Alarm nesnesinin Event\’ine temsilci metodun temsil edeceği metodu atıyoruz.Burası da çok önemli bir nokta. Çünkü olayın gerçekleşmesinden sonra çağırılacak fonksiyonun içeriğini burada tanımlıyoruz.Bu örnekte,ben Alarmın nerede aktif olduğunu ve saat kaçta çalıştığını konsola yazdırdım.Bu çok ama çok basit bir örnek oldu.Umarım anlaşılmış,en azından bazı şeylerin biraz daha oturmasını sağlamıştır. Her türlü soru ve fikirlerinizi thearda@hotmail.com adresine bekliyorum.