07-03-2011, 20:23
Asp.Net DataList kontrolü üzerinde kritere göre işlemler... Evet başlıktan da anlaşılabileceği üzere konumuz DataList kontrolü. Öncelikle kısaca bir DataList nedir değinelim DataList tıpkı repeater kontrolu gibi listelenmiş öğeleri göstermekte kullanılan bir kontroldür. Bununla birlikte DataList kontrolunu veritabanı tablolarına xml dosyalarına ya da diğer listenmiş öğelere bağlayabiliriz. (1)
Datalist nedir? girişini yaptığımıza göre DataList kontrolu ile çalışmaya başlayabiliriz. Konunun daha iyi anlaşılması açısından VB.NET ile bir örnek yapalım. Yeni bir webform.aspx açtığınızı ve adını da ceviz.aspx yaptığınızı {gizli reklam} düşünerek devam ediyorum. Elimizde bembeyaz bir aspx sayfası var şimdi sayfamıza VS.NET IDE'si Araç Kutusu WebForms sekmesinden kendisinden bahsettiğimiz "DataList Kontrolu" ekleyelim. Adını cevizDataList yapalım. Gördüğünüz üzere o kadar da bahsetmemize rağmen elle tutulur bir özelliği yok gibi görünüyor. Birlikte kontrolümüzü işimize yarayacak şekle getireceğiz.
Sayfamızın html görünümüne geçtiğimizde;
<aspataList id="cevizDataList" style="Z-INDEX: 104; LEFT: 560px; POSITION: absolute; TOP: 264px" runat="server">
</aspataList>
şeklinde bir görünümle karşılaşıyoruz. İşlemlerimizi <aspataList> </aspataList> arasında kalan bölgede yapacağız.
DataList'in template adı verilen Datalist'i biçimlendirmeye yarayan şablon özellikleri mevcuttur (2) . Bu şablonlar;
AlternatingItemTemplate - Değişken Öğeler Şablonu
EditItemTemplate - Düzenleme Öğe Şablonu
FooterTemplate - Alt Bilgi Öğe Şablonu
HeaderTemplate - Üst Bilgi Öğe Şablonu
ItemTemplate - Öğe Şablonu
SelectedItemTemplate - Seçilen Öğe Şablonu
SeparatorTemplate - Ayırıcı Öğe Şablonu
gibi şablonları vardır. Bu konumuzda ItemTemplate'i yani Öğe şablonu kullanacağız. Tekrar <aspataList> </aspataList> arasına dönelim ve öğe şablonunu nasıl kullanacağımıza birlikte bakalım;
<ItemTemplate>
<div style="padding:15151515;font-size:10pt;font-family:Verdana">
<div style="font:12pt verdana;colorarkred">
<i><b>
<%# DataBinder.Eval(Container.DataItem "title") %></i></b>
</div>
<br>
<b>Başlık No: </b>
<%# DataBinder.Eval(Container.DataItem "title_id") %>
<br>
<b>Kategori: </b>
<%# DataBinder.Eval(Container.DataItem "type") %>
<br>
<b>Yayıncı No: </b>
<%# DataBinder.Eval(Container.DataItem "pub_id") %>
<br>
<b>Fiyat: </b>
<%# DataBinder.Eval(Container.DataItem "price" "$ {0}") %>
<br>
<b>Bu da Bizim Kriter </b>
<%# IIF(DataBinder.Eval(Container.DataItem"pub_id") = 0877 "Ceviz.net Kitapevi""DiğerKitapevi")%>
<p>
</div>
</ItemTemplate>
Evet yukarıda işler biraz karışmış gibi görünüyor ama bu karışıklığı birlikte çözelim. Görüldüğü üzere öğe şablonumuzu [ItemTemplate] oluşturduk. Şimdi bizi ilgilendiren kısımlardan bahsedelim.
<%# DataBinder.Eval(Container.DataItem "title") %> dan başlayalım. <%# %> arasında kalan bölge ile biz sayfamızda html sözcüğü olmayan sözcükler yazdığımızı bildiriyoruz. Burada yazdıklarımızın aspx ya da başka bir deyişle. net sözcükleri olduğunu sayfamıza söylüyoruz.
DataBinder.Eval Metodu ise. net framework System.Web.UI.DataBinder isim uzayı içerisindeki DataBinder sınıfının bir metodudur. Ve çalışma anı (run time) veri bağlama ifadelerini (data-binding expressions) web tarayıcı da görüntülemek için kullanılır. (3)
Overloads Public Shared Function Eval( _
ByVal container As Object _
ByVal expression As String _
ByVal format As String _
) As String
görüldüğü üzere metodumuzun çalışması için bazı değerlere ihtiyacı var. Container.DataItem "title" ile metodumuzun bu ihtiyacını karşılıyoruz. Buradaki container; System.ComponentModel.Container ad uzayındaki bir sınıftır. Ve DataItem ise DataList in özelliği (property) dir. Yani container üzerinden DataList kontrolunun özelliklerine ulaşmış oluyoruz. Peki "title" ne?
Örneğimizde DataList kontrolü üzerinde kritere göre işlemler yapacağımızı söylemiştik. Ama işin fazlasıyla detayına indik "title" ne ? sorusuna gelince bu örneğimizde SQL SERVER 2000 üzerindeki Pubs veritabanındaki Titles tablosunu kullanacağız. ve "title" ise Titles tablosunda bir alan. Kısaca DataList kontrolu ile Titles Tablosundan çektiğimiz verilere göre DataList i biçimlendireceğiz.
Dikkat etmemiz gereken kod yapısı;
<%# IIF(DataBinder.Eval(Container.DataItem"pub_id") = 0877 "Ceviz.net Kitapevi""Diğer Kitapevi")%> arasında kalan kısımdır. Burada IIF(DataBinder.Eval(Container.DataItem"pub_id") = 0877 ile; Titles Tablosundan çektiğimiz değerler üzerinden değerlendirme yapıyoruz. IIF fonksiyonu (4) ;
Public Function IIf( _
ByVal Expression As Boolean _
ByVal TruePart As Object _
ByVal FalsePart As Object _
) As Object
işlemini yapar. Yani Expression Sorgulama kriterimiz Doğru olduğundaki sonuç Yanlış olduğundaki sonuç şeklinde çalışır. Biz burada eğer "pub_id" = 0877 ise bu kitabın ceviz.net kitapevine ait olduğunu eğer pub_id" = 0877 değilse diğer kitabevine ait olduğunu belirtiyoruz. Sizde kendi kriterinizi oluşturup farklı sonuçlar elde edebilirsiniz. Şimdi sayfamızın kod kısmına geçiyoruz. {Page_Load} ve
Dim ds As DataSet
Dim conn As SqlConnection
Dim cmd As SqlDataAdapter
conn = New SqlConnection("server=ceviznetserver;database=pubs ;Trusted_Connection=yes")
cmd = New SqlDataAdapter("select * from Titles" conn)
ds = New DataSet
cmd.Fill(DS "Titles")
cevizDataList.DataSource = DS.Tables("Titles").DefaultView
cevizDataList.DataBind()
F5 yapıp sayfamızı derleyip çalıştırıyoruz. Ve oluşturduğumuz kritere göre DataListimiz şekilleniyor.
Datalist nedir? girişini yaptığımıza göre DataList kontrolu ile çalışmaya başlayabiliriz. Konunun daha iyi anlaşılması açısından VB.NET ile bir örnek yapalım. Yeni bir webform.aspx açtığınızı ve adını da ceviz.aspx yaptığınızı {gizli reklam} düşünerek devam ediyorum. Elimizde bembeyaz bir aspx sayfası var şimdi sayfamıza VS.NET IDE'si Araç Kutusu WebForms sekmesinden kendisinden bahsettiğimiz "DataList Kontrolu" ekleyelim. Adını cevizDataList yapalım. Gördüğünüz üzere o kadar da bahsetmemize rağmen elle tutulur bir özelliği yok gibi görünüyor. Birlikte kontrolümüzü işimize yarayacak şekle getireceğiz.
Sayfamızın html görünümüne geçtiğimizde;
<aspataList id="cevizDataList" style="Z-INDEX: 104; LEFT: 560px; POSITION: absolute; TOP: 264px" runat="server">
</aspataList>
şeklinde bir görünümle karşılaşıyoruz. İşlemlerimizi <aspataList> </aspataList> arasında kalan bölgede yapacağız.
DataList'in template adı verilen Datalist'i biçimlendirmeye yarayan şablon özellikleri mevcuttur (2) . Bu şablonlar;
AlternatingItemTemplate - Değişken Öğeler Şablonu
EditItemTemplate - Düzenleme Öğe Şablonu
FooterTemplate - Alt Bilgi Öğe Şablonu
HeaderTemplate - Üst Bilgi Öğe Şablonu
ItemTemplate - Öğe Şablonu
SelectedItemTemplate - Seçilen Öğe Şablonu
SeparatorTemplate - Ayırıcı Öğe Şablonu
gibi şablonları vardır. Bu konumuzda ItemTemplate'i yani Öğe şablonu kullanacağız. Tekrar <aspataList> </aspataList> arasına dönelim ve öğe şablonunu nasıl kullanacağımıza birlikte bakalım;
<ItemTemplate>
<div style="padding:15151515;font-size:10pt;font-family:Verdana">
<div style="font:12pt verdana;colorarkred">
<i><b>
<%# DataBinder.Eval(Container.DataItem "title") %></i></b>
</div>
<br>
<b>Başlık No: </b>
<%# DataBinder.Eval(Container.DataItem "title_id") %>
<br>
<b>Kategori: </b>
<%# DataBinder.Eval(Container.DataItem "type") %>
<br>
<b>Yayıncı No: </b>
<%# DataBinder.Eval(Container.DataItem "pub_id") %>
<br>
<b>Fiyat: </b>
<%# DataBinder.Eval(Container.DataItem "price" "$ {0}") %>
<br>
<b>Bu da Bizim Kriter </b>
<%# IIF(DataBinder.Eval(Container.DataItem"pub_id") = 0877 "Ceviz.net Kitapevi""DiğerKitapevi")%>
<p>
</div>
</ItemTemplate>
Evet yukarıda işler biraz karışmış gibi görünüyor ama bu karışıklığı birlikte çözelim. Görüldüğü üzere öğe şablonumuzu [ItemTemplate] oluşturduk. Şimdi bizi ilgilendiren kısımlardan bahsedelim.
<%# DataBinder.Eval(Container.DataItem "title") %> dan başlayalım. <%# %> arasında kalan bölge ile biz sayfamızda html sözcüğü olmayan sözcükler yazdığımızı bildiriyoruz. Burada yazdıklarımızın aspx ya da başka bir deyişle. net sözcükleri olduğunu sayfamıza söylüyoruz.
DataBinder.Eval Metodu ise. net framework System.Web.UI.DataBinder isim uzayı içerisindeki DataBinder sınıfının bir metodudur. Ve çalışma anı (run time) veri bağlama ifadelerini (data-binding expressions) web tarayıcı da görüntülemek için kullanılır. (3)
Overloads Public Shared Function Eval( _
ByVal container As Object _
ByVal expression As String _
ByVal format As String _
) As String
görüldüğü üzere metodumuzun çalışması için bazı değerlere ihtiyacı var. Container.DataItem "title" ile metodumuzun bu ihtiyacını karşılıyoruz. Buradaki container; System.ComponentModel.Container ad uzayındaki bir sınıftır. Ve DataItem ise DataList in özelliği (property) dir. Yani container üzerinden DataList kontrolunun özelliklerine ulaşmış oluyoruz. Peki "title" ne?
Örneğimizde DataList kontrolü üzerinde kritere göre işlemler yapacağımızı söylemiştik. Ama işin fazlasıyla detayına indik "title" ne ? sorusuna gelince bu örneğimizde SQL SERVER 2000 üzerindeki Pubs veritabanındaki Titles tablosunu kullanacağız. ve "title" ise Titles tablosunda bir alan. Kısaca DataList kontrolu ile Titles Tablosundan çektiğimiz verilere göre DataList i biçimlendireceğiz.
Dikkat etmemiz gereken kod yapısı;
<%# IIF(DataBinder.Eval(Container.DataItem"pub_id") = 0877 "Ceviz.net Kitapevi""Diğer Kitapevi")%> arasında kalan kısımdır. Burada IIF(DataBinder.Eval(Container.DataItem"pub_id") = 0877 ile; Titles Tablosundan çektiğimiz değerler üzerinden değerlendirme yapıyoruz. IIF fonksiyonu (4) ;
Public Function IIf( _
ByVal Expression As Boolean _
ByVal TruePart As Object _
ByVal FalsePart As Object _
) As Object
işlemini yapar. Yani Expression Sorgulama kriterimiz Doğru olduğundaki sonuç Yanlış olduğundaki sonuç şeklinde çalışır. Biz burada eğer "pub_id" = 0877 ise bu kitabın ceviz.net kitapevine ait olduğunu eğer pub_id" = 0877 değilse diğer kitabevine ait olduğunu belirtiyoruz. Sizde kendi kriterinizi oluşturup farklı sonuçlar elde edebilirsiniz. Şimdi sayfamızın kod kısmına geçiyoruz. {Page_Load} ve
Dim ds As DataSet
Dim conn As SqlConnection
Dim cmd As SqlDataAdapter
conn = New SqlConnection("server=ceviznetserver;database=pubs ;Trusted_Connection=yes")
cmd = New SqlDataAdapter("select * from Titles" conn)
ds = New DataSet
cmd.Fill(DS "Titles")
cevizDataList.DataSource = DS.Tables("Titles").DefaultView
cevizDataList.DataBind()
F5 yapıp sayfamızı derleyip çalıştırıyoruz. Ve oluşturduğumuz kritere göre DataListimiz şekilleniyor.
