16 Mayıs 2018 Çarşamba

Asp.Net Datalist - Koşullu Renklendirme

Merhabalar,

Şimdi ise datalist üzerinde basit bir işlem daha gerçekleştireceğiz. senaryomuz şu şekilde: diyelim ki iki tarih arasındaki faturaları listeledik ve mahsup edilenleri yeşil mahsup edilmeyenleri ise kırmızı renkli görmek istiyoruz. Bunun için öncelikle kıyaslama yapacağımız sütunu bir değişkene atıyoruz. Tabloda görülmeyecek bir değişken ise visible'ını false yapınız. 
Yine datalist'imizin ItemDataBound event'ine kodlarımızı yazıyoruz.

if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
    if (((Label)e.Item.FindControl("LBLmahsup")).Text == "True")
        ((Label)e.Item.FindControl("LBLcariadi")).ForeColor = System.Drawing.Color.Green;
    else
        ((Label)e.Item.FindControl("LBLcariadi")).ForeColor = System.Drawing.Color.Red;
}

Bunun dışında ise tasarım tarafında da ayarlama yapabiliriz.

<asp:Label ID="LBLcariadi" runat="server" Text='<%#Eval("CARIADI") %>'
           ForeColor='<%#Eval("DURUM").ToString()=="2"?                                                          System.Drawing.Color.Green:System.Drawing.Color.Red %>'></asp:Label>

Buradaki kodumuz da ise durum sütununda 2 olanları yeşil renkli diğerlerini ise 3 kırmızı renkli yap diyoruz..

Bunun dışında sadece 2 koşul için değil daha fazla koşul içinde kullanabiliriz  Renk özelliğinin yanı sıra cssclass özelliğinde de kullanabiliriz. Diyelim ki listemizdeki taleplerin öncelik durumu olsun, bunlar da normal, acil ve çok acil olmak üzere 3 çeşit olsun. Öncelik tipi normal olanlar yeşil, acil olanlar sarı, çok aciller ise kırmızı listelensin. Burada css verirken bootstrap'ın css'lerini kullanıyorum. Ayrıca text özelliğinde de durumu aktif ise check işaret, değilse x işareti koyuyor.

<asp:Label ID="LBLdurum" runat="server" 
Text='<%#Eval("Durum").ToString()=="Aktif"?"&check;":" X "  %>'
CssClass='<%#Eval("Durum").ToString()=="Aktif"?"label label-success":"label label-danger" %>'></asp:Label>

Bu mantıktan yola çıkarak bu koşullandırmayı; tasarım tarafında datalist, gridview vb  veri listeleme araçları içinde çeşitli yerlerde kullanabilirsiniz.

Herkese İyi Çalışmalar

15 Mayıs 2018 Salı

Asp.Net Datalist - Alt Toplam

Merhabalar,

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.
Şimdi ise gelelim koşullu toplam yapacak olursa nasıl yapacağız. Diyelim ki faturalarımızı listeledik. Satış ve satınalma iadeleri SATIŞ, satınalma ve satış iadeleri ise ALIŞ diye etiketlediğimizi varsayalım. Ben sadece etiketi satış olanları toplamak istiyorum. Bunun için dataset'den "AL_SAT" sütunu SATIŞ olanları bul ve matrahı 5000 TL ve üzerinde olanları topla diyorum. 

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

14 Mayıs 2018 Pazartesi

Yeniden Dönüş

Merhabalar,

Yaklaşık 5 yıldır ara verdiğim not defterime tekrardan yazmaya başlıyorum. Haziran 2013'de Pamukkale Üniversitesi Bilgisayar Mühendisliği bölümünden mezun oldum. Sonrasında askerliğimi yaptım. Şu anda  Şubat 2015'de çalışmaya başladığım özel bir tekstil firmada yazılım, program destek, donanım, network vb konularda çalışmaktayım. İşe başladıktan sonra anladım ki okul ile iş hayatının hiç bir alakası yok :) Öğrencilik zamanınızda ne kadar kendinizi geliştirirseniz o kadar rahat başlarsınız iş hayatına. Ben onun zorluğumu çektim.

Bundan sonra blogumda yazılım, donanım, network vb. konularda notlar tutacağım. Umarım sizler de işinize yarar bilgiler bulabilirsiniz.

Herkese İyi Günler

SQL Server - Satırları Birleştirme

Merhaba,  Bu yazımda sql server'da birden çok satırı birleştirip tek satır yapmayı anlatacağım. Senaryomuz şu şekilde olsun mesela; bir...