Bu üç kontrol ASP.Net te verileri görüntülemek için kullanmaktayız. Peki bu üç kontrolün birbirlerine göre avantajları ve dezavantajları nedir? Nezama

Web geliştirme ASP gibi basit bir script tabanlı web programlam teknolojileri uzun bir yol kat etmiştir. Klasik ASP ile olağan sıkıcı tekrarlayan kodlama işleri artık geçmişte kaldı. Örneğin bir zamanlar verileri görüntüleyebilmek için aşağıdaki gibi bir kodlama adımları gerektirmekteydi.

veritabanına bağlantı oluşturma.  
SQL Sorgusu ile ADO üzerinden verileri alma.  
Verileri ekranda göstermek için HTML Tagları (Table) oluşturma. 
Recordset ile dongü 	
Recordsetten gelen kayıtları HTML e yazma.  
sonraki kayda git. 
Footer için gerekli ekran bilgisini oluşturma

Recordset teki içerikleri biçimlendirerek görüntüleyebilmek için <table> html etiketinden yararlanılırdı. Recordset içerisindeki her satır için <tr> etiketi ve alanları kolonlar halinde görüntüleyebilmek için <td> etiketi kullanılırdı. Bu <tr> ve <td> etiketleri döngü içerisinde kayıtların sonuna kadar oluşturulur ve döngüden çıkıldıktan sonra <table> etiketi kapatılırdı.

Bu yaklaşım klasik ASP de büyük bir dezavantajdır. Web sitenizin kodu ile HTML içeriğini sıkça entegre etmeniz gerekecektir. Bu yazıda DataGrid, DataList ve Repeater kontrollerinin her birinin benzersiz özelliklerini, avantajlarını ve dezavantajlarını inceleyeceğiz. Bir çok özelliğinden dolayı ASP.Net projelerinde sağladığı sıralama, sayfalama ve veri düzenlemelerinden dolayı DataGrid sıkça kullanılmaktadır. Ancak DataGrid bir ASP.Net web sayfasındaki verileri görüntüleyen bir denetim için her zaman en iyi bir seçenek değildir. İlk olarak verilerimizi DataGrid üzerinde incelemesini yapacağız. Ardından bu işlemleri DataList üzerine taşıyarak ayın incelemeyi yapacağız ve akabinde Repeater ile aynı incelemeleri gerçekleştireceğiz.

Web Kontrollerindeki Benzerlikler

ilk olarak bu üç web kontrollerinin benzer özelliklerine bakalım. Öncelikle üç kontrol de aynı şeyi yapmak verilerinizi listelemek için tasarlanmıştır. Bir başka benzerlikleri ise verileri bağlama için gereken koddur. Bu kod sadece iki satırdan oluşur:

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

 Genellikle DataSource atanan DataListesi nin özelliği DataSet, SqlDataReader, OleDbDataReader veya başka bir toplama (ArrayList, Array) sınıfı olmalıdır. DataSource ile belirttikten sonra DataBind yöntemini kullanarak kayıtları Web Kontrolüne atanır. DataSource ile atanan veriler web kontrolünün içerisinde satırlar (items) oluşturur. Web kontrolündeki her bir veri DataSource atanan sınıfın bir satırını temsil eder. Örnek kontrollerin içerisindeki satırları DataGridItem sınıfına aktarır. Bu kontroller HTML olarak biçimlendirildiğinde sayfada verileri tablo şeklinde gösterir ve <table> etiketine dönüştürülür. Her bir DataGridItem ise <tablerow> etiketine dönüştürülür.

Bu kontrollerin bir diğer benzerliği içerisindeki her kontrolün çok kolay bir şekilde özelliştirilebilir ve hazır şablonlarının olmasıdır. Bu kontroller içerisinde TemplateColumn şeklinde şablonlar belirleyerek içeriğini özel bir isteğe bağlı olarak değiştirilebilmektedir. Bu kontrollerde görünümü özelleştirebilmek için BackColor, ForeColor, CssClass, BorderStyle vb. şeklinde seçenekleri bulunmaktadır. Bu özellikler sayesinde stil ayarlarını belirleyebilirsiniz. Repeater bu özelliklere sahip değildir.

DataGrid Web Kontrol İncelemesi.

Bu üç Web kontrolü arasındaki özellikleri en fazla olan kontrollerden biridir. Ancak HTML biçimlendirme olarak esnekliği diğerlerine göre daha azdır. Datagrid HTML formatında tablo biçimi kullanmaktadır. Bu nedenle her kayıt için <tr> etiketi ile satır ve her kolon için <td> etiketi oluşturulur.

DataGrid içerisinde çok sayıda kullanılabilir faydalı özellikler içerir. Bu özelliklerden kullanımı en çok kolaylaştıran AllowSorting özelliğidir. Kısa bir kod eklenerek son kullanıcıya verileri istediği kolonlara göre sıralayabilme özelliğini verir. Ayrıca biraz daha kod ile verileri sayfalama veya verilerin satır içerisinde düzenlemelerine olanak sağlanabilir. Bu özellikler DataGridin kullanımını oldukça arttıran özelliklerdir.

DataGrid in sıkça kullanılmasının nedenlerinden biri ise kısa bir kod ile verileri kolayca listeleyebilmesidir. Bunun için DataSource ve DataBind metodunu kullanmak yeterlidir. Bu şekilde kolay kullanımı yüzünden yazılım uzmanları tarafından tercih edilse de listelenen verilerin düzeni üzerinde tasarım ve şekil değişiklikleri yapmak için oldukça zaman ve enerji gerekmektedir.

DataGrid in bu etkileyici özelliklerine rağmen iki dezavantajı bulunmaktadır. İlk olarak özelleştirimesi sınırlıdır. Yazıtipleri, renkleri ve sütunlar ile ilgili çeşitli özelleştirmeleri mevcut. DataGrid özelliklerinden her sütun DataGridColumn ile türetilir. Bu DataGrid sütunlarının türleri :

- BoundColumn

- ButtonColumn

- EditColumn

- HyperLinkColumn

- TemplateColumn

Bu sütun türlerinin her biri verileriniz ile etkileşim sağlar. Örneğin, BoundColumn DataSource ile atanan verilere ait  değerleri görüntüler. URL bölümlerini görüntülemek için HyperLinkColumn kullanılmaktadır. Ayrıca bu sütun tipleriyle bir sınıf türetilerek ayrı bir DataGridColumn sınıfı oluşturulabilir. (Karakter sayısını sınırlayan bir kolon tipi örneği verilebilir.)

DataGrid in ikinci bir dezavantajı ise performansıdır. Bu üç Web kontrolünün içerisinde en kötü performansı datagrid vermektedir. Bunun nedeni her satır için çok fazla sayıda viewstate üretmesidir. DataGrid in viewstate özelliğini kapatabilirsiniz. Ancak bu sefer de DataGrid in sıralama, sayfalama veya düzenleme gibi özelliklerini kullanamıyorsunuz.

 Bu makalemizde DataGrid in performansını Microsoft'un Web Uygulamaları için kullandığımız Stress Tool u kullanarak sonuçlarını karşılaştıracağız. Bu testler için kullanılan kodu makalenin sonunda bulunan linklerden indirebilirsiniz.

Bu Stress Tool u ile DataGrid i iki farklı şekilde teste tabi tuttuk. DataGrid de Northwinds veritabanının Müşteriler tablosundan 91 kayıt görüntüleniyor. Birinci testimizde DataGrid in AutoGenerateColumns özelliği true olarak ayarlandı. İkinci testimizde ise EnableViewState false olarak ayarlandı. Buna göre sonuçlar :

 Şekil 1 : DataGrid Performansı

DataList Analizi

Hatırlarsak DataGrid in HTML formatında <table> etiketi iler başlar her satırda <tr> etiketi ve her kolonda <td> etiketi kullanarak verileri ekrana listelerdi. DataList bu etiketler yerine <span> etiketini kullanır ve şablonlar aracılığıyla bu tanımlamayı kullanıcıya bırakmaktadır. Bu şablonlar içerisinde yazılım uzmanı HTML biçimlendirme ve DataBinding biçimlendirmeyi tek bir yerden yapabilirler. Bunları tanımlayabilmek için <%# ve #> etiketlerinin içerisine DataSource e atanan verilerin satırlarını tanımlayabilirler. Aşağıdaki ItemTemplate bölümüne ŞirketAdi bilgisini Bind edildiğini 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. Şablon üzerinde HTML etiketlerini kullanarak Şirket adını farklı şekillerde yazdırabilirsiniz. Örneğimizde Şirket adını kalın harfler ile ilgili kişi adını ise normal harf ile yazdırıldığını 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 satırı için ItemTemplate içerisindeki kodlar derlenir. ItemTemplate ile birlikte DataList içerisinde 7 ayrı şablonu destekler:

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

DataGrid in sadece dört şablonunu (ItemTemplate, HeaderTemplate, FooterTemplate, EditItemTemplate)desteklediğini unutmayın. DataList in varsayılan HTML biçilmlendirmesi <table> etiketlerini kullanır. Ancak bu şablonlar RepeatColumns ve RepeatLayout özellikleri kullanılarak HTML biçimlendirmesi değiştirilebilir. DataList te verileri görüntüleyebilmek ve kullanıcı dostu formlar oluşturabilmek DataGride göre daha kolay ve daha performanslı olmaktadır. Bu karşılaştırma için sadece DataGrid üzerinde özelleştirme ve geliştirmeleri incelemek yeterli değildir. DataList in kullanılabilirliğini tespit etmek için DataGrid in sıralama, sayfalama ve düzenleme işlevini karşılaştırmak gerekir.

DataList EditItemIndex şablonu ve EditCommant, UpdateCommand ve CancelCommand olayları ile satır düzenlemeyi desteklemektedir. DataList e göre DataGrid ile bu işlemleri gerçekleştirmek daha kısa zaman alabilir. Bu eşitsizlik iki sebepten kaynaklanır:

  • DataGrid te Düzenle EditCommandColumn sütun türü üzerinden bir  Update / İptal butonu otomatik olarak oluşturulur. DataList üzerinde ise bu işlemler el ile yapılması gerekmektedir.
  • DataGrid içerisinde BoundColumn sütun türleri otomatik olarak EditItemTemplate üzerinden TextBox öğeleri oluşturur. Ancak DataList ile bu işlemleri TextBox Web kontrollerini oluşturup kendimiz bind etmemiz gerekir.

DataList ile satır düzenleme çok zor olmasa da sıralama ve sayfalama işlemleri için aynı şeyi söylemek mümkün değil. Bu işlevselliği DataList e kazandırmak için önemli bir zamana ihtiyaç vardır. Bu özellikleri kullanmak istediğiniz takdirde en uygun seçim DataGrid olacaktır.

Şekil 2: DataList Performansı

 Şekil 2 de iki ayrı performans sonucu görünmektedir. Birinde veriler viewstate ile ölçülmüştür. Diğerinde ViewState özelliği kapatılarak ölçümleme yapılmıştır.

Repeater Analizi

Bu kontroller içerisinde en iyi esnekliği Repeater kontrolü sunmaktadır. DataList veya DataGrid her ikisi de otomatik olarak önceden belirlenmiş HTML biçimlendirmelerini kullanarak verilerin görüntülenmesini sağlar. Repeater web kontrolünde ise HTML biçimlendirmesi tamamen yazılım uzmanı tarafından belirtilmektedir. Dolayısıyla <table> veya <span> gibi kontrol etiketlerini tercihinize göre kullanabilirsiniz.

 DataList te olduğu gibi Repeater içerisinde de kullanabileceğiniz şablonlar bulunmakta. Bunlar ;

  • AlternatingItemTemplate
  • FooterTemplate
  • HeaderTemplate
  • ItemTemplate
  • SeparatorTemplate

HeaderTemplate ve FooterTemplate verilerin öncesi ve sonrasında görüntülenecek HTML biçimlendirmesini belirtir. AlternatingItemTemplate ve ItemTemplate ise DataSource ile web kontrole bind edilen verilerin HTML biçimlendirmesini yapabileceğiniz şablonlardır. Örneğin çalışan bilgilerini web sayfasında bir liste halinde listelemek istersek aşağıdaki 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üretilmiş bir webcontrolü değildir. Bu yüzden DataGrid ve DataList gibi kontrollerin ortak özelliklerinden yoksundur. Repeater içerisinde listelediğimiz çalışan adlarını kalın yapmak istediğimizde aşağıdaki kodu yazmamız gerekiyor.

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

Oysa DataList veya DataGrid içerisinde bu işlemi yapmak isteseydik ItemStyle-Font-Bold özelliğini True yapmamız gerekirdi. Bu gibi işlemler için HTML etiketleri kullanmak gerekir. Bu etiketler Repeater ın şablonlarında yığılmaya neden olacaktır. Bu HTML biçimlendirmeyi proje üzerinde çalışan diğer yazılım uzmanlarının  çözümleyebilmesi ve ileriki tarihlerde bir değişiklik yapmak istendiğinde müdahale edilmesi daha zordur.  Aynı zamanda DataGrid ve DataList özellikleri Microsoft Visual Studio .Net ya da ASP.NET Web Matrix gibi araçlarla otomatik olarak ayarlanabilir.

Ayrıca Repeater geliştirme zamanı ile birlikte herhangi bir yerleşik sayfalama, düzenleme veya veri düzenleme özelliklerinden yoksundur. Bu özelliği desteklemediği için kullanılabilirliği pek yoktur. Performans açısından inceleyecek olursak en yavaş web kontrolü Repeater, ondan biraz daha hızlı DataList ve bu iki web kontrolüne göre daha hızlı olan DataGrid i verebiliriz. Bu performans incelemesine ait sonuçları aşağıdaki şekilden de görebilirsiniz.

Şekil 3 : Repeater, DataList ve DataGrid Performans Karşılaştırması

Sonuç

Birçok Web yazılım uzmanı verileri sayfalarda görüntüleyebilmek için en çok DataGrid Web Kontrolünü kullanmaktadırlar. Ancak bu tür verileri listeleyebilmek için bazı sorulara cevap vererek karar vermelisiniz. Bu sorulardan: Kullanıcılara verilerini sıralamalarına izin vermek istiyor musunuz? Verileri farklı HTML formatlarında görüntülemek istiyor musunuz yoksa <table> etiketi sizin için yeterli mi? Bu sayfa çok sık ziyaretçi alıp performans kaybına sorun olacak mı?

DataGrid Web kontrolü son kullanıcı için sağladığı özellikler açısından bu üç kontrol içerisinden en fazla özelliğe sahip olan kontroldür. Verilerinizi DataGrid içerisinde listeleyebilmek için bu web kontrolünü eklemeniz ve bir kaç satır kod yazmanız yeterli olacaktır. Bu üç veri kontrolleri arasında etkileyici özellikleri, kolaylığı, performansı ile diğer üç web kontrollerinden en verimli olanıdır.

DataList şablonları ile verileriniz üzerinde daha fazla denetim sağlar. DataList kullanıyorsanız genellikle DataGrid e oranla daha fazla kod yazmanız gerekir. Ne yazık ki, DataList içerisinde sayfalama ve sıralama özelliği bulunmamaktadır ve bu önemsiz bir ayrıntı değildir. Performans açısından DataGrid e göre daha ağır kalmaktadır.

Repeater nihayetinde verilerinizin HTML biçimi olarak görüntülenmesinde daha sınırsız bir kontrol sağlar. Repeater ile görüntülemek istediğiniz verilerinizi DataSource e atadıktan sonra içerisindeki şablonları kullanarak HTML kodlarını yazıp objelere atamanız gerekmektedir. Bu yüzden daha fazla kod satırı ve daha fazla zamana ihtiyaç vardır.  

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