ASP.Net de Datalist in Item Databound (Olayı) Eventinin Kullanımı
Merhabalar.
Bu yazıda ASP.Net Data kontrollerinden Datalistin önemli bir Eventi olan ItemDataBound i inceleyeceğiz. Tabi her zamanki gibi örnek bir uygulama ile yapıyor olacağız.
Kısaca ItemDataBound Eventinden bahsetmek istiyorum.
ItemDataBound Datalist,DataRepeader, DataGrid gibi nesnelerin için geliştirilmiş bir Event dir. Örenğin Datalist ile verileri ekranda göstermek için yapmamız gereken işlem
VT den çektiğimiz ve bir Dataset ya da DataTable ye doldurğumuz verileri Datalist e bağlamak (Bind etmek) için , yani başka bir değişle verileri göstermek için hiçbir döngü kullanmayız.
( Örenğin : Klasik ASP ya da PHP kullanılırken veritabanından çekilen veirler bir Record Set e aktarılır ve bir döngü ile sırayla ekrana yazdırılırdı tabi bu döngü içerisinde isteğimiz kontrol, koşul vb kontrolü yapabiliyorduk. )
Hemen bir senaryo kurgulayacak olursak ; misal olarak veritabanımızdan öğrenci bilgilerini çekiyor olalım. Bu bilgiler arasında öğrencinin notu da bulunuyor olsun ve notu 50 nin altında olan öğrencinin yanında kırmızı renkte Kaldı , 50 nin üstünde olanların altın da Yeşil renkte Geçti yazdırmak isteyelim. Eski klasik asp sisteminde yapmış olsak verileri listelerediğim döngünün içerisinde bir if kontrolü ile notunu kontrol edip isteğimiz işlemi yapabilirdik.
Peki ASP.Net ile döngü kullanmadığımıza göre bunu nasıl yapabiliriz? Burada ItemDataBound devreye giriyor . ItemDataBound Eventi Veritabanından çekilen veriler ekrana basılmadan önce bu verilere ulaşabileceğimiz son yerdir. Şimdi yukarıda bahsettiğim örneği uygulayalım. İlka önce veritabanından verileri çekelim ve DataList e aktaralım. Bn bu örenkte SqlDatasource ile SqlServer 2005 Express daki tablodan öğrencinin isim,soyisim ve puan bilgilerini çekiyorum. Bu bilgileri ekranda yazdırırken isim ve soyisim alanlarını direk Eval ile tablonun içine , puan bilgisini ise bir Label e yazdıralım ki Code Behind tarafından bu labele ulaşabilelim.
Defalut.aspx
<asp:DataList ID="DataList1" runat="server" CellPadding="3" DataSourceID="SqlDataSource1" OnItemDataBound="DataList1_ItemDataBound" BackColor="#DEBA84" BorderColor="#DEBA84" BorderStyle="None" BorderWidth="1px" CellSpacing="2" GridLines="Both">
<FooterStyle BackColor="#F7DFB5" ForeColor="#8C4510" />
<SelectedItemStyle BackColor="#738A9C" Font-Bold="True" ForeColor="White" />
<ItemTemplate>
<table border="0">
<tr>
<td style="width: 69px; font-weight: bold; font-size: 10pt; text-decoration: none;">
İsim</td>
<td style="width: 24px; font-weight: bold; font-size: 10pt; text-decoration: none;">
</td>
<td style="width: 100px; font-weight: bold; font-size: 10pt; color: #cc0066; text-decoration: none;">
<%# Eval("isim") %>
</td>
</tr>
<tr>
<td style="width: 69px; font-weight: bold; font-size: 10pt;">
Soyisim</td>
<td style="width: 24px; font-size: 10pt;">
</td>
<td style="width: 100px; font-weight: bold; font-size: 10pt; color: #cc0066; text-decoration: none;">
<%# Eval("soyisim") %>
</td>
</tr>
<tr>
<td style="width: 69px; font-weight: bold; font-size: 10pt; text-transform: none;">
puan</td>
<td style="width: 24px; font-weight: bold; font-size: 10pt; text-transform: none;">
</td>
<td style="width: 100px; font-weight: bold; font-size: 10pt; text-transform: none;">
<asp:label ID="lblPuan" runat="server" Text='<%# Eval("puan") %>' Font-Bold="True" ForeColor="#00C000"></asp:label>
</td>
</tr>
<tr>
<td colspan="3" align="center">
<asp:Label ID="lblDurum" runat="server" BackColor="White" Font-Bold="True" Font-Size="14px" Width="97px" BorderColor="Maroon" BorderStyle="Solid"></asp:Label></td>
</tr>
</table>
</ItemTemplate>
<ItemStyle BackColor="#FFF7E7" ForeColor="#8C4510" />
<HeaderStyle BackColor="#A55129" Font-Bold="True" ForeColor="White" />
</asp:DataList>
SQLDatasource kontromüzü aşağıdaki gibi yapalım
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>"
SelectCommand="SELECT [isim], [soyisim], [puan] FROM [ogrenci]"></asp:SqlDataSource>
Bu hali ile çalıştıracak olursak aşğaıdaki gibi olacaktır.

Görülüdüğü gibi durum alanrımız şuanda boş . ozaman dolduralım . dataList1 in Properties penceresindeki Event alanından item databound yazan yere çift tıklayıp Code behind tarafına oluşturılan Eventin kodlarına geçelim ve şağıdaki gibi kodları ekleyelim.
Default.aspx.cs
protected void DataList1_ItemDataBound(object sender, DataListItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item | e.Item.ItemType == ListItemType.AlternatingItem)
{
Label mylabel = (Label)e.Item.FindControl("lblPuan");
Label durum = (Label)e.Item.FindControl("lblDurum");
int puan = Convert.ToInt32(mylabel.Text);
if (puan < 50)
{
durum.Text = "Kaldı";
durum.ForeColor = Color.Red;
}
else
{
durum.Text = "Geçti";
durum.ForeColor = Color.Green;
}
}
}
Ne yaptık ?
İlk olarak if ile Datalisteki değerin bir item ya da AlternationItem olma koşulunu kontrol ettik şart doğru ise işlemlerimze başlıyoruz.
Yapmılan işlem lblPuan ID li labeldeki değeri alıp 50 ile karşılaştırmak ve kuşula göre lblDurum ID li labele Kaldı ya da Geçti yazdırmak ve Labelin yazı rengini de ona göre değiştimek. Form üzerindeki bir Label in text değerine ulaşmak için Label tipinde bir nesne örneği oluşturuyor isim olarak da myLabel veriliyo , sonra o anda okunan kaydı tutan e parametresinin item.Find methodu kullanılıyor ve parantez içerine ulaşılmak istenen Labelin ID si veriliyor. Aynı şeklikde kaldı veya geçti yazıcak labelin değeride durum olarak oluşturuluyor. LblPuan nın değeği int tipinde bir değişkene atanıyor, 50 ile karşılaştırılıyor, küçük ise durum labelinin tex ve forecolor özellikleri veriliyor. Ve bitti....
Ekaran çıktısının son hali .
Kolay Gelsin.
Uygulamayı buradan indirebilirsiniz