hayal et, tasarla, hayata geçir



Eval Metodunun Kullanımı

Bu yazıda template bazlı çalışan kontrollerde (Repeater, ListView vs.) Eval metodunun kullanım çeşitlerini göreceğiz.

Eval metodu; bir koleksiyon üzerindeki mevcut kayıttan istediğimiz bir veriye ulaşmamızı sağlar. Data source üzerindeki bir property (class veya struct olduğunda) veya bir kolonun (datatable olduğunda) adını bu metoda vermemiz yeterlidir. En basit anlamda kullanımı şu şekildedir;

<ItemTemplate>
<%# Eval("Title") %>
</ItemTemplate>

Bazı durumlarda (örneğin veri tipinin DateTime olması gibi) ekrana yazdırdığımız çıktının formatını değiştirmek isteyebiliriz. Eval metodunun ikinci overloadu bize burada yardımcı olacaktır. Örneğin;

<ItemTemplate>
<%# Eval("Date", "{0:dd.MM.yyyy}") %>

<%# Eval("Date", "{0:"+System.Globalization.DateTimeFormatInfo.CurrentInfo.ShortDatePattern+"}") %>
</ItemTemplate>

şeklinde yazdığımızda ekrana sadece gün, ay, yıl bilgisi html çıktısı olarak gönderilecektir.


Eval metodunu herhangi bir kontrolün propertysini set etmek için de kullanmamız gerekebilir. Bu gibi durumlarda property tek tırnaklı yazılmalıdır.

<ItemTemplate>
<asp:CheckBox runat="server" Checked='<%# Eval("IsChecked") %>' Visible='<%# Eval("IsVisible") %>'/>
</ItemTemplate>

Eval metodunu bazı kod parçacıkları içerisinde kullanmak istersek şu şekilde bir yazım gerekmektedir;

<ItemTemplate>
<asp:HyperLink runat="server" NavigateUrl='<%# String.Format("~/Default.aspx?Id={0}", Eval("Id")) %>'/>
</ItemTemplate>

Diğer bir yandan aspx tarafına mümkün olduğunca az kod yazmamızın doğru olmasından ötürü kod tarafına bazı işlemleri taşıyabiliriz. Burada arka tarafa yazdığımız protected bir metot bize yeterli olacaktır.

<ItemTemplate>
<%# Calculate(Eval("Count")) %>
</ItemTemplate>
protected string Calculate(object count)
{
    if(count != null)
    {
          return ((int)count * 2).ToString();
    }

    return "0";
}

Aynı şekilde birden fazla veriyi de Eval ile alıp code-behind tarafında kullanabiliriz.

<ItemTemplate>
<%# Calculate(Eval("Count1"), Eval("Count2")) %>
</ItemTemplate>
protected string Calculate(object count1, object count2)
{
    if(count1 != null && count2 != null)
    {
          return ((int)count1 * (int)count2).ToString();
    }

    return "0";
}

Eğer bağlanan sınıfa direk erişmeyi istersek bunun için de Container.DataItem ı kullanmamız yeterli olacaktır.

<ItemTemplate>
<%# GetTitle(Container.DataItem) %>
</ItemTemplate>
protected string GetTitle(object member)
{
        return ((Member)member).Title;
}


Yanıtla



SON YAZILARIM

genel
Bulut Bilişim (Cloud Computing) Nedir

Burada anlatılan hikayedeki kişi ve kurumlar tamamen hayal ürünüdür.

Sene 1995'de ilk...

genel
Microsoft Türkiye Açık Akademi

Microsoft tarafından Türkiye'deki ilk ücretsiz online yazılım okulu Açık Akademi açıldı....

genel
Windows Azure Blob Arayüzü

Bir önceki yazımızda Blob servisine kısa bir giriş yapmıştık. Yazıyı okumak isterseniz