29 Ekim 2010 Cuma

DataList Kontrolu

Asp.Net projelerinde, veriyi getirmenin yollarindan biri de DataList kontoludur. Daha once Repeater uzerinden gecmistik. Mantik olarak bir farki yok, yine bu da veri getirecek, yine templateleri olacak. Fakat DataList'in bize kattigi en buyuk yenilik Template'leri Repeater'daki gibi source kisminda elle yazmak zorunda olmamamiz. Ayrica yine ekstradan iki template'imiz daha olacak fakat, kisaca DataList hakkinda ufak notlar yazalim buraya.

Yine her Data Bound kontrollerinde oldugu gibi DataListte de sag ust kosede smart tagimiz var. Bu smart tagi tikladigimiz zaman bize bazi ozellikler sunuyor. Nedir bunlar, datasource kaynagini gosterme, veya paging, sorting gibi ozellikleri aktif etme, veya bazi kontroller icin veri ekleme ve EditTemplates ozelligi. Iste bu ozellik sayesinde Templatelerimize elle mudahele yapabiliyor olacagiz. TextBox eklemek istersek, surukle birak sayesinde ItemTemplate icerisine surukleyebilecegiz. Repeater'da olsa source kisminda elle olusturmamiz gerekecekti. Kontrollere bu kadar erisme konusunda hakim oldugumuzdan DataList'in kullanilabilirligi daha ust seviyeye cikiyor boylece. Template'leri kisaca anlatmayacagim, sadece asagi goruntuyu incelersek zaten her sey biraz daha netlesicek sanirim.


EditItemTemplate: DataList'in repeater'dan farkli olarak bizlere sundugu template'dir. Adindan da anlasilacagi uzere, degisiklik yapma firsati tanir bize. Yukaridaki ItemTemplate'e gore, diyelim kiDuzenle butonuna basinca, lablellar textbox'a donussun ve urun kayitlarini update edelim. (id haric tabiki). EditItemTemplate'e gelip, duzenle butonuna tiklayinca nasil bir goruntu istiyorsak, onu kontrolleri surukle birakla yontemiyle olusturuyoruz.

Burda bilmemiz gereken bir ozellik de, bu ornek icin guncelle butonuna basinca textboxlardaki degerlere gore yeni verikaydi olusturacak. Yani verileri yeni degerleriyle guncelleyecek. Bunun icin Guncelle butonunun click eventini tetiklememiz gerekecek. Iste bunun icin EditItemTemplate bize, bazi event secenekleri vermis. Properties'e gelip bakarsak orda CommandName isimli bir ozellik goruruz. Buna gore CommandName ozelligine Update yazarsak, ve DataList'in properties ozelliklerinden UpdateCommand eventini tetiklersek direk butona tiklaninca yazmak istedigimi kodlari yazarak istedigimiz senaryoyu gerceklestirmis oluruz. Ayni durum veri ekleme(InsertCommand), veri silme(DeleteCommand), vazgecmek icin(CancelCommand) eventleri icin de gecerlidir.

4 Ekim 2010 Pazartesi

Repeater Kontrolü

Asp.Net'de bir çok veri gösterme kontrolü vardır. Öncelikle veri getirme ve veri gösterme arasındaki farkı iyi kavramak gerekir. Veri getirme kontolleri, toolbox'da data sekmesinde sonu source ile biten kontrollerdir. SqlDataSource,AccessDataSource vs. gibi. Veri gösterme kontrolleri ise, DataList,GridView,Repeater vs. gibi kontollerdir. Şimdi Repeater hakkında kısa bilgiler ve örnekler vererek açıklamaya çalışacağım.

Repeater, öncelikle kullanım kolaylığı bakımından diğer tüm veri gösterme kontrollerinden ayrılır. Kullanım kolaylığı gerçekten büyük avantaj sağlar, fakat sahip olduğu özellik bakımından diğerlerinden daha az performanslıdır. Yani gridview'da datalara türlü taklalar attırırken, bunları Repeaterda yapmak biraz daha zordur, kodlama tarafında uğraşmamız gerekir. Fakat her türlü Css'i rahatça giydirebildiğimizden, diğerlerine göre daha çok tercih edilir. Piyasada ihtiyaçların yine de %70-80 karşılamaktadır Repeater.

Repeaterda verileri gösterirken tasarımı diğer kontroller gibi herhangi bir listeden vs. seçme şansımız yok. Bu noktada source kısmından biraz html kodlarıyla haşır neşir olup tasarımı, görünümü kendimiz belirlememiz gerekecek. Bunun için de bize yardımcı olacak 5 template tanımlayacağız.

1-ItemTemplate: Repeater'ın veritabanından gelen tek veriyi ekrana göstermesi için hazırlanan template'dir.
Örneğin, veritabanından bölge isimlerini çekip ekranda göstermek istiyorsak;

yazarak biz metot çağrısı veya web.configden herhangi bir veri okuyabiliriz. # işareti metot çağırmak için kullanılacağından, Eval fonksiyonunu çağırıp kolon ismini yazarak Bölge isimlerini ekrana yazdırmış olduk.

2-SeperatorTemplate: İki veri arasına istenilen karakteri koymaya yarar. Örneğin yukarıdaki bölge isimlerini getirten fonksiyonda 10 tane bölge ismi olsa hepsini yanyana boşluk olmadan yazar. Eğer alt alta yazmasını istiyorsak bölgeleri yazmamız gereken kod,
artık alt alta bölge isimlerini getirecek.

3-HeaderTemplate: İsminden de anlaşılacağı üzere verilere başlık bilgisi eklemek için kullanılır. Örneğin,

4-AlternatingItemTemplate: Verileri ayrıştırarak onlara farklı özellikler vermemizi sağlar. Örneğin ilk veri kırmızı sonrası mavi, veya bir küçük bir büyük şeklinde gelmesini istersek. Yine örnek verecek olursak,

Yukarda mavi getirtiyorduk yazıları, artık bu kontrolden sonra bir mavi bir kırmızı renkte gelecek veriler.

5-FooterTemplate: Yine HeaderTemplate gibi adından da anlaşılacağı üzere verilerin altına yapılması istenen kodlar yazılır bu kısımda. Örneğin en alta verilerin çekildiği tarihi yazmak istiyorsak kodumuz şu şekilde olacaktır,

1 Ekim 2010 Cuma

Linq To SQL

Language Integrated Query, yani kısaca LINQ. Daha önce uzun uzadıya açıkladığım C#3.0 yeniliklerinin hepsinin ortak amacı Linq teknolojisini oluşturmaktı. Gerçekten de C# için dönüm noktalarından biri oldu diyebiliriz. Satırlarca kodu oldukça kısaltan, daha okunur daha profesyonel bir kodlama ve bunun sonucunda da daha performanslı daha efekif bir kodlama getirdi bizlere. Şimdi kısaca linq yapısını sql kullanarak CRUD(create,read,update,delete) işlemlerini kullanarak anlatmaya çalışalım.

Öncelikle veritabanına erişmek için aşağıdaki adımları yapmamız gerekir,

Projemize add new item diyip,

LinqtoSql Classes'i seçiyoruz. Ardından çıkan sayfada, server explorerdan uygun veritabanını kullanarak tablolarımızı sürükleyip boş kısma şekildeki gibi sürüklüyoruz,

Create: Insert işlemidir. Veritabanına kayıt eklenmesi durumda nasıl bir yol izleyeceğimizi kısaca örnek üzerinden gösterirsek;

//Örnek, Kategori tablosuna bir kategori insert edelim.
Kategori yeni = new Kategori { KategoriAdi = "Kurutma Makineleri" };

context.Kategoris.InsertOnSubmit(yeni);//Kuyruğa soktuk aslında burda,daha onaylanmadı

context.SubmitChanges(); //Değişiklikleri onaylatıyoruz

Yukarda da gördüğümüz gibi herhangi bir insert komutu vs. yok aslında. C#3.0 yeniliklerinden
Object Initializer ile yeni nesne yarattık. New Kategori'ye dikkat ediniz.

Update: İsimden de anlaşılacağı üzere güncelleme işlemlerini nasıl yapacağımızı inceleyeceğiz. Önce Update edilecek entity yüklenir. Örneğin Id'si 1 olan veri üzerinde değişiklik yapalım. Üstte de dediğim gibi önce yükleme işlemini yapalım;

Kategori ktr = context.Kategoris.FirstOrDefault(k => k.KategoriId == 1);

Eğer yüklenmiş bir entity'nin property'sinde değişiklik yapılırsa otomatik olarak update kuyruğuna atılır. KategoriAdi'ni değiştirmek isteyelim;

ktr.KategoriAdi = "Deneme";

Kuyrukta bekleyen tüm entity'ler onaylanırlar ve gerekli işlemler sql sunucusuna yaptırılır.

context.SubmitChanges();

Delete: Delete işlemi de isminden anlaşılacağı üzere verilerin silinmesi anlamına geliyor. Kullanım açısından insert işlemine benziyor.(önce kuyruğa atıp, daha sonra onaylanma bakımından) Örneğin yukarıda eklediğimiz satırı silelim. Id'sini kontrol ettiğimde 33 olduğunu gördüm. Yani şimdi id'si 33 olan ürünü silelim;

Kategori silinen = context.Kategoris.FirstOrDefault(k => k.KategoriId == 33);
context.Kategoris.DeleteOnSubmit(silinen);//kuyruğa attık
context.SubmitChanges();//onayladık