Bu yazıda veritabanından aldığımız verileri sayfamızda göstermeye yarayan GridView, DetailsView ve DataList sunucu kontrollerinin DataBound olayından bahsedeceğiz.
DataBound olayı bize hem gösterilecek veriler üzerinde değişiklik yapma imkanı hemde gelen verilerin durumuna göre kontrolümüzün içerisinde bulunan bazı alanlar üzerinde işlem yapmamıza olanak verir.
DetailsView kontrolünde bu olayın ismi DataBound, GridView kontrolünde RowDataBound ve DataList kontrolümüzde ise ItemDataBound'dur.
(GridView kontrolü üzerinde DataBound olayıda tanımlıdır fakat veriler sayfada gösterilmeden önce üzerinde işlemler yapabilmemizi RowDataBound olayı sağlar.)
Bu yazıda örnek olarak sadece DataList kontrolüne ait ItemDataBound olayı hakkında bilgi vereceğim fakat yukarıda belirttiğim diğer kontroller içinde yapılacak işlem aynıdır.
Aşağıda örnek olarak DataList üzerinde gösterilen ürün bilgilerinden veritabanında yeni ürün olarak işaretlenmiş olanlarda "yeni.gif" isimli resmin görüntülenmesini yeni ürün olarak işaretlenmemiş ürünlerde ise bu resim dosyasının gösterilmemesini sağlayacağız.
DataList kontrolümüzün örnek kodunu aşağıda bulabilirsiniz.
<asp:DataList ID="dlUrunler" runat="server" RepeatColumns="2" ShowFooter="False" ShowHeader="False" CellSpacing="3" RepeatDirection="Horizontal" OnItemDataBound="dlUrunler_ItemDataBound">
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Bind("Adi") %>' ></asp:Label>
<br />
<asp:HyperLink ID="HyperLink1" runat="server" ImageUrl='<%# Eval("Resim") %>' NavigateUrl='<%# "udetay.aspx?uid=" + Eval("USiraID") %>' ></asp:HyperLink>
<br />
<asp:Image ID="imgYeni" runat="server" ImageUrl="yeni.gif" Visible="false" />
<br />
<asp:Label ID="Label2" runat="server" Text='<%# Bind("Ozet") %>' ></asp:Label>
</ItemTemplate>
<ItemStyle HorizontalAlign="Center" VerticalAlign="Top" />
</asp:DataList>
DataList içerisinde ürün adını ve açıklamasını gösteren iki Label ve ürün resmini gösteren bir HyperLink kontrolü tanımlıdır. Ayrıca veritabanındaki duruma göre gösterip gizleyeceğimiz bir Image kontrolüde imgYeni ismi ile mevcuttur.
DataListimizin ItemDataBound olayına ait kodlarda aşağıdaki gibidir.
protected void dlUrunler_ItemDataBound(object sender, DataListItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item | e.Item.ItemType == ListItemType.AlternatingItem)
{
if (Convert.ToBoolean(DataBinder.Eval(e.Item.DataItem, "Yeni")))
{
e.Item.FindControl("imgYeni").Visible = true;
}
}
}
Kodumuzu satır satır inceleyecek olursak;
ItemDataBound olayının birinci satırında ListItem elemanın tipinin Item yada Alternatif Item olup olmadığı kontrol ediliyor. (DataList kontrolünde bir satırda isteğimize göre birden çok veri satırı gösterilebildiği için iki türlü ListItem mevcut. Birincisi Item, ikincisi ise AlternatingItem)
İkinci satırda yer alan if bloğu içinde ise DataList'in DataBinder fonksiyonu ile veritabanındaki "Yeni" alanının değerini alıyoruz. Bu değeri Boolen veri tipine çevirerek eğer ürün veritabanında yeni olarak işaretlenmiş ise DataList kontrolündeki imgYeni kontrolünün Visible özelliğini True olarak değiştirerek görünür olmasını sağlıyoruz.
GridView, DetailsView ve DataList kontrollerinde yukarıdaki örnekte olduğu gibi DataBount olayı ile veriler gösterilmeden önce satır ve sütunlar üzerinde şarta bağlı olarak farklı işlemler yapabilirsiniz.
Faydalı olması dileğiyle,
Mustafa Altuntaşlar