Wednesday, August 23, 2006

Gridview'da sütün toplamı

Bu yazımda ASP.NET 2.0'da sıkça kullanılan gridview kontrolünde herhangi bir satırdaki değerlerin toplamını tabanda (footer) nasıl gösterileceğini anlatacağım.

Bu özellik genelde bir kayıda ait sayısal değerlerin toplamı için kullanılır. Mesela bi firmanın cari hesabını gösterirken alıcak ve borç durumlarını aşağıda göstermek için kullanılabilir.

Bu veritabanına bağlanı ile gerçekleştirilebilir. Ama daha sistematik ve esnek bir biçimdede yapabiliriz. Öncelikle gelen verileri toplayacak fonksiyonlar yazmamız gerekiyor. Bu fonksiyonları .aspx sayfamızın başına yazabiliriz.

<script runat="server">
Dim toplamalacak As Decimal = 0.0
Function tekdegergetir(ByVal deger As Decimal) As Decimal
toplamalacak += deger
Return deger
End Function
Function toplamgetir() As Decimal
Return toplamalacak
End Function
</script>


Şimdi fonksiyonlarımı yazdığımıza göre gridview'mızı buna hazırlamız gerekir. Öncelikle toplamını göstermek istediğimiz sütunu template field'a çevirmemiz gerekiyor. Böylece footer'ı gösterme şansımız olacak.

<asp:TemplateField HeaderText="Alacak" SortExpression="alacak">
<ItemTemplate>
<%# tekdegergetir(decimal.Parse(Eval("alacak").ToString())).ToString("N2") %>
</ItemTemplate>
<FooterTemplate>
<%# toplamgetir().ToString("N2") %>
</FooterTemplate>
</asp:TemplateField>

Gerekli veri bağlantılarını yaptığınızdada istenilen sonucu alıcaksınız.

İyi çalışmalar.

Tuesday, August 15, 2006

Gridview'de Kısa Tarih Formatı

Gridview ASP.NET 2.0'ın veri kontrollerinden biri. Veritabanlarından tarih satırları 10/31/2005 00:00:00 şeklinde gridview'e geliyor. Bu da istenilen verinin farklı çıkmasının yanında 00:00:00 saati de anlamsız ve kötü bir görüntü oluşturuyor. Bunu önleyebilmek için <asp:boundfield> kontrolünün DataFormatString özellikleği var.

<asp:boundfield datafield="DateOfBirth" dataformatstring="{0:MM/dd/yyyy}">

Bu özelliği bu şekilde kullandığımız zaman sorunun çözüleceğini düşünebiliriz. Fakat bu şekilde de istediğimiz sonucu alamadığımızı deneyerek görebilirsiniz. Bunun nedeni "cross site scripting attack"'leri engellemek için bu kısmın "htmlencoding"'in dataformatstring özelliğinin çağrılmadan önce çalışmasıdır. Çözüm ise

<asp:boundfield datafield="DateOfBirth" dataformatstring="{0:MM/dd/yyyy}" htmlencode="false">

kere tıklandı