Datalist kontrolünü esnekliğinden ve istediğim gibi kullanabilmemden dolayı seviyorum. Şimdi datalist kontrolünde alt toplamı nasıl elde edeceğimizden bahsedeceğim kısaca.
Projemizde gerekli tasarımları yaptıktan sonra Datalist'in footerTemplate etiketinin altına bir adet toplamı göstereceğimiz bir adet Label ekliyoruz.
<asp:Label ID="LBLmatrah" runat="server" Text="0"></asp:Label>
Şimdi ise Bu Label'a toplamı yazağımız koda gelelim. Datalist'in ItemDataBound eventine gidiyoruz.
if (e.Item.ItemType == ListItemType.Footer)
{
if
(dsetbaslik.Tables[0].Rows.Count > 0)
{
((Label)e.Item.FindControl("LBLmatrah")).Text = string.Format("{0:N}", Convert.ToDouble(dsetbaslik.Tables[0].Compute("Sum(MATRAH)", "MATRAH >= 0").ToString()));
}
}
Şimdi burada dikkat etmemiz gereken noktalar:
- Öncelike dataset'imiz global tanımlandığı için buradan rahatlıkla verilerimize erişebiliyoruz.
- İlk olarak LBLMatrah değişkenimiz footer alanında olduğu için if ile kontrol ediyoruz. Sonra herhangi bir hata almamak için ilk önce gelen satır sayımız 0'dan büyük mü diye kontrol ediyoruz.
- Sum kodunun yanındaki değişkenimiz ise bizim verileri çektiğimizde toplamını alacağımız sütunun adıdır.
- MATRAH>=0 kısmı ise koşulumuzdur. Ben burada 0 ve 0'dan büyük olanların hepsini topla dedim. Eğer siz isterseniz bu 0'ı değiştirerek belli bir değerin üzerindekileri toplayabilirsiniz.
string satis = (dsetDetay.Tables[0].AsEnumerable()
.Where(r
=> r.Field<string>("AL_SAT") == "SATIS")
.AsDataView()
.ToTable()
.Compute("SUM(MATRAH)", "SUM(MATRAH)
>= 5000"))
.ToString();
Bu koşullu toplamayı union ile iki veya daha fazla sorguyu birleştirdiğiniz zaman da kullanabiliriz, ama o zaman tip diye birer sütun oluşturacağız. Diyeceğiz ki : ilk sorguda tip alanı tip1, uniondan sonraki ikinci sorguda tip2 diyeceğiz. Sonra da toplama işleminde where koşulunun olduğu yere hangisinin toplamını istiyorsak onu yazacağız.
Herkese İyi Çalışmalar
Hiç yorum yok:
Yorum Gönder