Senaryomuz basit arkadaşlar;
Faturaların listelendiği bir gridview'imiz var.Bu faturalar saha satış elemanları tarafından işlenip sisteme kaydediliyor.Fakat bu faturaların şirket binasında çalışan personeller tarafından onaylanması gerekmektedir...
Personellet,Gridview içinde listelenmiş faturalardan hangilerinin onaylandığını ve hangilerinin hala onay beklediğini görmek zorundadır...
Veritabanımızda faturalarımızın tutulduğu iki adet tablomuz var,faturaUst ve faturaAlt...faturaUst tablomuz bizim üzerinde çalışacağımız tablodur çünkü bizim bu işlemi yaparken faturada yer alan alt satırlar yani satılan ürün,ürünün fiyatı,kaç adet satıldığı,kdv matrahı vb... gibi şeylerle işimiz yok,biz sadece faturanın onaylanıp onaylanmadığı bilgisiyle ilgileniyoruz ve dolayısıyla bizim asıl ilgileneceğimiz tablo,faturanın genel bilgilerini tutan faturaUst tablosudur...O zaman ne yapıyoruz ? Hemen bu tabloda "Onay" adında int32 veritipinde bir alan oluşturmalıyız...Eğer bu alandaki değer 0 ise fatura onaylanmamış,bu değer 1 ise fatura onaylanmış...
Saha çalışanları faturayı işledikten sonra sistem otomatik olarak faturaUst tablosuna faturanın genel bilgilerini kaydederken "Onay" bilgisini 0 olarak kaydettiğini farzediyoruz...Şirket binasında çalışan arkadaşlarımız faturayı onayladığında ise ilgili faturanın "Onay" alanındaki 0 değerini 1 yapıyoruz.Yani aslında gayet basit...Ama listede bu değerlerin direk 1 ya da 0 olarak görünmesini istemek ve "anlasınlar kardeşim işte 0 false 1 true" diyemeyiz değil mi ? Çünkü onlar programcı değiller....
Bunu bir Sql sorgusu ile 0 değerini "Bekliyor",1 değerini ise "Onaylandı" şeklinde gösterebiliriz...Mesala şu komut gayet işe yarar bir komut;
CASE WHEN Onay =0 THEN 'Bekliyor' WHEN Onay=1 THEN 'Onaylandı' END AS Durum
fakat aslında bu da etkili bir çözüm değil,çünkü yüzlerce fatura satırınının içinde bu farketmek zor olabilir,bence en güzeli png dosyaları kullanmak,böylece hem görsellik sağlamış olacağız hemde kullanıcılar için kolaylık.
Bunun için size güzel bir site önerebilirim http://www.iconfinder.com/ bu adresten konuya göre,boyuta göre istediğiniz formatta,büyüklükte dosyaları bulabilirsiniz...
Ben onaylanmış bilgisi için bir check,bekliyor bilgisi için bir saat indirip root klasörümün içindeki images klasörüme kopyaladım...
Şimdi gelelim gridview içinde önce bir alan açmaya...
Hemen bir TemplateField alanı oluşturuyoruz;
<asp:TemplateField HeaderText="Durum">
<ItemTemplate>
<center>
<asp:Image ID="durumImg" runat="server" ImageUrl="~/images/bekliyor.png" />
</center>
</ItemTemplate>
</asp:TemplateField>
Artık daha belirgin ve görsel bir grid elde ettik,fakat şimdi ne yapacağız? Tabi ki eğer "Onay" değeri 0 ise grid içinde ilgili alanda saat ,değer 1 ise check göstereceğiz...Bunun için gridview içinde bulunan tüm satırları tek tek okutup,ve okunan fatura ile ilgili bilgiyi içeren faturaUst tablosundaki satırı bulup,o satırın "Onay" alanındaki değeri bulacağız....
Bunun için önce gridview içinde kaç satırın var olduğunu bulmalıyız ve bu çok kolay
int satirSayisi=gridview.Rows.Count; // toplam satır sayısını int veritipindeki satirSayisi değişkenine aktardık burada...
daha sonra gridview içindeki satırların hepsini bitene kadar okutmalıyız,yani for döngüsü kullanıyoruz...döngü sınırımız satirSayisi kadar olmalı...
if (GridView1.Rows.Count > 0) //satır var mı ?
{
for (int i = 0; i < GridView1.Rows.Count; i++)
{
Label lblBlg = (Label)GridView1.Rows[i].FindControl("lblFatBelgeNo");
string belgeNo = lblBlg.Text; //faturanın belge numarası
var fatUstBel = from fT in fatData.faturaUsts.Where(j => (j.belgeNo == belgeNo))
select fT; // tablodaki ilgili fatura
foreach (var glO in fatUstBel) // elde edilen dizi içindeki değerleri bize veren döngü
{
if (glO.onay != null) //onay alanı boş değilse
{
if (glO.onay.Trim() == "Onaylandı") //eğer onaylı ise
{
Image im = (Image)GridView1.Rows[i].FindControl("durumImg");
im.ImageUrl = "../images/onay.png";
}
if (glO.onay.Trim() == "Bekliyor") // eğer bekliyor ise
{
Image imgs = (Image)GridView1.Rows[i].FindControl("durumImg");
imgs.ImageUrl = "../images/bekliyor.png";
}
}
}
}
}

Hiç yorum yok:
Yorum Gönder