Web gelistirme ASP gibi basit bir script tabanli web programlam teknolojileri uzun bir yol kat etmistir. Klasik ASP ile olagan sikici tekrarlayan kodlama isleri artik geçmiste kaldi.

DataGrid, DataList ve Repeater Karşılaştırması

Web gelistirme ASP gibi basit bir script tabanli web programlam teknolojileri uzun bir yol kat etmistir. Klasik ASP ile olagan sikici tekrarlayan kodlama isleri artik geçmiste kaldi. Örnegin bir zamanlar verileri görüntüleyebilmek için asagidaki gibi bir kodlama adimlari gerektirmekteydi.

veritabanina baglanti olusturma.  
SQL Sorgusu ile ADO üzerinden verileri alma.  
Verileri ekranda göstermek için HTML Taglari (Table) olusturma. 
Recordset ile dongü 	
Recordsetten gelen kayitlari HTML e yazma.  
sonraki kayda git. 
Footer için gerekli ekran bilgisini olusturma

Recordset teki içerikleri biçimlendirerek görüntüleyebilmek için <table> html etiketinden yararlanilirdi. Recordset içerisindeki her satir için <tr> etiketi ve alanlari kolonlar halinde görüntüleyebilmek için <td> etiketi kullanilirdi. Bu <tr> ve <td> etiketleri döngü içerisinde kayitlarin sonuna kadar olusturulur ve döngüden çikildiktan sonra <table> etiketi kapatilirdi.

Bu yaklasim klasik ASP de büyük bir dezavantajdir. Web sitenizin kodu ile HTML içerigini sikça entegre etmeniz gerekecektir. Bu yazida DataGrid, DataList ve Repeater kontrollerinin her birinin benzersiz özelliklerini, avantajlarini ve dezavantajlarini inceleyecegiz. Bir çok özelliginden dolayi ASP.Net projelerinde sagladigi siralama, sayfalama ve veri düzenlemelerinden dolayi DataGrid sikça kullanilmaktadir. Ancak DataGrid bir ASP.Net web sayfasindaki verileri görüntüleyen bir denetim için her zaman en iyi bir seçenek degildir. Ilk olarak verilerimizi DataGrid üzerinde incelemesini yapacagiz. Ardindan bu islemleri DataList üzerine tasiyarak ayin incelemeyi yapacagiz ve akabinde Repeater ile ayni incelemeleri gerçeklestirecegiz.

Web Kontrollerindeki Benzerlikler

ilk olarak bu üç web kontrollerinin benzer özelliklerine bakalim. Öncelikle üç kontrol de ayni seyi yapmak verilerinizi listelemek için tasarlanmistir. Bir baska benzerlikleri ise verileri baglama için gereken koddur. Bu kod sadece iki satirdan olusur:

dataWebControlId.DataSource = DataListesi; dataWebControlId.DataBind();

 Genellikle DataSource atanan DataListesi nin özelligi DataSet, SqlDataReader, OleDbDataReader veya baska bir toplama (ArrayList, Array) sinifi olmalidir. DataSource ile belirttikten sonra DataBind yöntemini kullanarak kayitlari Web Kontrolüne atanir. DataSource ile atanan veriler web kontrolünün içerisinde satirlar (items) olusturur. Web kontrolündeki her bir veri DataSource atanan sinifin bir satirini temsil eder. Örnek kontrollerin içerisindeki satirlari DataGridItem sinifina aktarir. Bu kontroller HTML olarak biçimlendirildiginde sayfada verileri tablo seklinde gösterir ve <table> etiketine dönüstürülür. Her bir DataGridItem ise <tablerow> etiketine dönüstürülür.

Bu kontrollerin bir diger benzerligi içerisindeki her kontrolün çok kolay bir sekilde özellistirilebilir ve hazir sablonlarinin olmasidir. Bu kontroller içerisinde TemplateColumn seklinde sablonlar belirleyerek içerigini özel bir istege bagli olarak degistirilebilmektedir. Bu kontrollerde görünümü özellestirebilmek için BackColor, ForeColor, CssClass, BorderStyle vb. seklinde seçenekleri bulunmaktadir. Bu özellikler sayesinde stil ayarlarini belirleyebilirsiniz. Repeater bu özelliklere sahip degildir.

DataGrid Web Kontrol Incelemesi.

Bu üç Web kontrolü arasindaki özellikleri en fazla olan kontrollerden biridir. Ancak HTML biçimlendirme olarak esnekligi digerlerine göre daha azdir. Datagrid HTML formatinda tablo biçimi kullanmaktadir. Bu nedenle her kayit için <tr> etiketi ile satir ve her kolon için <td> etiketi olusturulur.

DataGrid içerisinde çok sayida kullanilabilir faydali özellikler içerir. Bu özelliklerden kullanimi en çok kolaylastiran AllowSorting özelligidir. Kisa bir kod eklenerek son kullaniciya verileri istedigi kolonlara göre siralayabilme özelligini verir. Ayrica biraz daha kod ile verileri sayfalama veya verilerin satir içerisinde düzenlemelerine olanak saglanabilir. Bu özellikler DataGridin kullanimini oldukça arttiran özelliklerdir.

DataGrid in sikça kullanilmasinin nedenlerinden biri ise kisa bir kod ile verileri kolayca listeleyebilmesidir. Bunun için DataSource ve DataBind metodunu kullanmak yeterlidir. Bu sekilde kolay kullanimi yüzünden yazilim uzmanlari tarafindan tercih edilse de listelenen verilerin düzeni üzerinde tasarim ve sekil degisiklikleri yapmak için oldukça zaman ve enerji gerekmektedir.

DataGrid in bu etkileyici özelliklerine ragmen iki dezavantaji bulunmaktadir. Ilk olarak özellestirimesi sinirlidir. Yazitipleri, renkleri ve sütunlar ile ilgili çesitli özellestirmeleri mevcut. DataGrid özelliklerinden her sütun DataGridColumn ile türetilir. Bu DataGrid sütunlarinin türleri :

- BoundColumn

- ButtonColumn

- EditColumn

- HyperLinkColumn

- TemplateColumn

Bu sütun türlerinin her biri verileriniz ile etkilesim saglar. Örnegin, BoundColumn DataSource ile atanan verilere ait  degerleri görüntüler. URL bölümlerini görüntülemek için HyperLinkColumn kullanilmaktadir. Ayrica bu sütun tipleriyle bir sinif türetilerek ayri bir DataGridColumn sinifi olusturulabilir. (Karakter sayisini sinirlayan bir kolon tipi örnegi verilebilir.)

DataGrid in ikinci bir dezavantaji ise performansidir. Bu üç Web kontrolünün içerisinde en kötü performansi datagrid vermektedir. Bunun nedeni her satir için çok fazla sayida viewstate üretmesidir. DataGrid in viewstate özelligini kapatabilirsiniz. Ancak bu sefer de DataGrid in siralama, sayfalama veya düzenleme gibi özelliklerini kullanamiyorsunuz.

 Bu makalemizde DataGrid in performansini Microsoft un Web Uygulamalari için kullandigimiz Stress Tool u kullanarak sonuçlarini karsilastiracagiz. Bu testler için kullanilan kodu makalenin sonunda bulunan linklerden indirebilirsiniz.

Bu Stress Tool u ile DataGrid i iki farkli sekilde teste tabi tuttuk. DataGrid de Northwinds veritabaninin Müsteriler tablosundan 91 kayit görüntüleniyor. Birinci testimizde DataGrid in AutoGenerateColumns özelligi true olarak ayarlandi. Ikinci testimizde ise EnableViewState false olarak ayarlandi. Buna göre sonuçlar :

 Sekil 1 : DataGrid Performansi

DataList Analizi

Hatirlarsak DataGrid in HTML formatinda <table> etiketi iler baslar her satirda <tr> etiketi ve her kolonda <td> etiketi kullanarak verileri ekrana listelerdi. DataList bu etiketler yerine <span> etiketini kullanir ve sablonlar araciligiyla bu tanimlamayi kullaniciya birakmaktadir. Bu sablonlar içerisinde yazilim uzmani HTML biçimlendirme ve DataBinding biçimlendirmeyi tek bir yerden yapabilirler. Bunlari tanimlayabilmek için <%# ve #> etiketlerinin içerisine DataSource e atanan verilerin satirlarini tanimlayabilirler. Asagidaki ItemTemplate bölümüne SirketAdi bilgisini Bind edildigini görmekteyiz:

 

<asp:DataList runat="server" id="myDataList">
	<ItemTemplate>
		<%# DataBinder.Eval(Container.DataItem, "SirketAdi") %>
	</ItemTemplate>
</asp:DataList>

Bu dizilimde ek olarak HTML biçimlendirme yapabilirsiniz. Sablon üzerinde HTML etiketlerini kullanarak Sirket adini farkli sekillerde yazdirabilirsiniz. Örnegimizde Sirket adini kalin harfler ile ilgili kisi adini ise normal harf ile yazdirildigini görmekteyiz:

<asp:DataList runat="server" id="myDataList">
	<ItemTemplate>
		<b><%# DataBinder.Eval(Container.DataItem, "SirketAdi")%></b>
		<br/>
		<%# DataBinder.Eval(Container.DataItem, "KisiAdi")%>
	</ItemTemplate>
</asp:DataList>

DataList te DataSource atanan verilerin her satiri için ItemTemplate içerisindeki kodlar derlenir. ItemTemplate ile birlikte DataList içerisinde 7 ayri sablonu destekler:

  • AlternatingItemTemplate
  • EditItemTemplate
  • FooterTemplate
  • HeaderTemplate
  • ItemTemplate
  • SelectedItemTemplate
  • SeperatorTemplate

DataGrid in sadece dört sablonunu (ItemTemplate, HeaderTemplate, FooterTemplate, EditItemTemplate)destekledigini unutmayin. DataList in varsayilan HTML biçilmlendirmesi <table> etiketlerini kullanir. Ancak bu sablonlar RepeatColumns ve RepeatLayout özellikleri kullanilarak HTML biçimlendirmesi degistirilebilir. DataList te verileri görüntüleyebilmek ve kullanici dostu formlar olusturabilmek DataGride göre daha kolay ve daha performansli olmaktadir. Bu karsilastirma için sadece DataGrid üzerinde özellestirme ve gelistirmeleri incelemek yeterli degildir. DataList in kullanilabilirligini tespit etmek için DataGrid in siralama, sayfalama ve düzenleme islevini karsilastirmak gerekir.

DataList EditItemIndex sablonu ve EditCommant, UpdateCommand ve CancelCommand olaylari ile satir düzenlemeyi desteklemektedir. DataList e göre DataGrid ile bu islemleri gerçeklestirmek daha kisa zaman alabilir. Bu esitsizlik iki sebepten kaynaklanir:

  • DataGrid te Düzenle EditCommandColumn sütun türü üzerinden bir  Update / Iptal butonu otomatik olarak olusturulur. DataList üzerinde ise bu islemler el ile yapilmasi gerekmektedir.
  • DataGrid içerisinde BoundColumn sütun türleri otomatik olarak EditItemTemplate üzerinden TextBox ögeleri olusturur. Ancak DataList ile bu islemleri TextBox Web kontrollerini olusturup kendimiz bind etmemiz gerekir.

DataList ile satir düzenleme çok zor olmasa da siralama ve sayfalama islemleri için ayni seyi söylemek mümkün degil. Bu islevselligi DataList e kazandirmak için önemli bir zamana ihtiyaç vardir. Bu özellikleri kullanmak istediginiz takdirde en uygun seçim DataGrid olacaktir.

Sekil 2: DataList Performansi

 Sekil 2 de iki ayri performans sonucu görünmektedir. Birinde veriler viewstate ile ölçülmüstür. Digerinde ViewState özelligi kapatilarak ölçümleme yapilmistir.

Repeater Analizi

Bu kontroller içerisinde en iyi esnekligi Repeater kontrolü sunmaktadir. DataList veya DataGrid her ikisi de otomatik olarak önceden belirlenmis HTML biçimlendirmelerini kullanarak verilerin görüntülenmesini saglar. Repeater web kontrolünde ise HTML biçimlendirmesi tamamen yazilim uzmani tarafindan belirtilmektedir. Dolayisiyla <table> veya <span> gibi kontrol etiketlerini tercihinize göre kullanabilirsiniz.

 DataList te oldugu gibi Repeater içerisinde de kullanabileceginiz sablonlar bulunmakta. Bunlar ;

  • AlternatingItemTemplate
  • FooterTemplate
  • HeaderTemplate
  • ItemTemplate
  • SeparatorTemplate

HeaderTemplate ve FooterTemplate verilerin öncesi ve sonrasinda görüntülenecek HTML biçimlendirmesini belirtir. AlternatingItemTemplate ve ItemTemplate ise DataSource ile web kontrole bind edilen verilerin HTML biçimlendirmesini yapabileceginiz sablonlardir. Örnegin çalisan bilgilerini web sayfasinda bir liste halinde listelemek istersek asagidaki gibi bir söz dizimi kullanabilirsiniz.:

<asp:Repeater runat="server" id="rptCalisanlar">
	<HeaderTemplate>
		<ul>
	</HeaderTemplate>
	<ItemTemplate>
		<li><%# DataBinder.Eval(Container.DataItem, "EmployeeName")%> </li>
	</ItemTemplate>
	<FooterTemplate>
		</ul>
	</FooterTemplate>
</asp:Repeater>

 Repeater DataGridden türetilmis bir webcontrolü degildir. Bu yüzden DataGrid ve DataList gibi kontrollerin ortak özelliklerinden yoksundur. Repeater içerisinde listeledigimiz çalisan adlarini kalin yapmak istedigimizde asagidaki kodu yazmamiz gerekiyor.

<ItemTemplate>
	<li><b><%# DataBinder.Eval(Container.DataItem, "EmployeeName") %></b></li>
</ItemTemplate>

Oysa DataList veya DataGrid içerisinde bu islemi yapmak isteseydik ItemStyle-Font-Bold özelligini True yapmamiz gerekirdi. Bu gibi islemler için HTML etiketleri kullanmak gerekir. Bu etiketler Repeater in sablonlarinda yigilmaya neden olacaktir. Bu HTML biçimlendirmeyi proje üzerinde çalisan diger yazilim uzmanlarinin  çözümleyebilmesi ve ileriki tarihlerde bir degisiklik yapmak istendiginde müdahale edilmesi daha zordur.  Ayni zamanda DataGrid ve DataList özellikleri Microsoft Visual Studio .Net ya da ASP.NET Web Matrix gibi araçlarla otomatik olarak ayarlanabilir.

Ayrica Repeater gelistirme zamani ile birlikte herhangi bir yerlesik sayfalama, düzenleme veya veri düzenleme özelliklerinden yoksundur. Bu özelligi desteklemedigi için kullanilabilirligi pek yoktur. Performans açisindan inceleyecek olursak en yavas web kontrolü Repeater, ondan biraz daha hizli DataList ve bu iki web kontrolüne göre daha hizli olan DataGrid i verebiliriz. Bu performans incelemesine ait sonuçlari asagidaki sekilden de görebilirsiniz.

Sekil 3 : Repeater, DataList ve DataGrid Performans Karsilastirmasi

Sonuç

Birçok Web yazilim uzmani verileri sayfalarda görüntüleyebilmek için en çok DataGrid Web Kontrolünü kullanmaktadirlar. Ancak bu tür verileri listeleyebilmek için bazi sorulara cevap vererek karar vermelisiniz. Bu sorulardan: Kullanicilara verilerini siralamalarina izin vermek istiyor musunuz? Verileri farkli HTML formatlarinda görüntülemek istiyor musunuz yoksa <table> etiketi sizin için yeterli mi? Bu sayfa çok sik ziyaretçi alip performans kaybina sorun olacak mi?

DataGrid Web kontrolü son kullanici için sagladigi özellikler açisindan bu üç kontrol içerisinden en fazla özellige sahip olan kontroldür. Verilerinizi DataGrid içerisinde listeleyebilmek için bu web kontrolünü eklemeniz ve bir kaç satir kod yazmaniz yeterli olacaktir. Bu üç veri kontrolleri arasinda etkileyici özellikleri, kolayligi, performansi ile diger üç web kontrollerinden en verimli olanidir.

DataList sablonlari ile verileriniz üzerinde daha fazla denetim saglar. DataList kullaniyorsaniz genellikle DataGrid e oranla daha fazla kod yazmaniz gerekir. Ne yazik ki, DataList içerisinde sayfalama ve siralama özelligi bulunmamaktadir ve bu önemsiz bir ayrinti degildir. Performans açisindan DataGrid e göre daha agir kalmaktadir.

Repeater nihayetinde verilerinizin HTML biçimi olarak görüntülenmesinde daha sinirsiz bir kontrol saglar. Repeater ile görüntülemek istediginiz verilerinizi DataSource e atadiktan sonra içerisindeki sablonlari kullanarak HTML kodlarini yazip objelere atamaniz gerekmektedir. Bu yüzden daha fazla kod satiri ve daha fazla zamana ihtiyaç vardir.  

Not : Bu makalenin orjinalini http://msdn.microsoft.com/en-us/library/aa479015.aspx adresinde okuyabilirsiniz.

İlgili Makaleler

Bu yazıya 0 yorum yapılmış.

Yorum Gönder