Asp.net ile sepet güncelleme ve Datalist itemcommand özelliği

  • 05.07.2012 11:55
  • ASP.Net
  • 8517

Asp-net-ile-sepet-guncelleme-ve-datalist-itemcommandBu makalede ASP.NET projelerimizde kayit listelemek için en çok kullandigimiz nesnelerden biri olan Datalist kontrolünden kayit silme ve kayit güncelleme islemlerini anlatmaya çalisacagim. Bu konuyu anlatirken de Asp.net ile sepet güncellemeyi de ufaktan görmüs olacagiz.

Makaleye baslamadan önce islemleri bir e-ticaret sitesindeki, sepet modülü üzerinden yürütecegimizi belirtmek isterim. Islemimizde sepetteki ürünü silmek veya ürün adetinin güncellenmesine yönelik islemler yapacagiz.

 

Asagiya ilk önce bu islemlerde kullandigim ürün clasimi ekliyorum:

namespace EBuyLib.BTObjects

{

    public class Urun

    {

        public int UrunId { get; set; }

        public string UrunAdi { get;set; }

        public AltKategori AltKategri { get;set; }

        public Kategori Kategri { get;set; }

        public Marka Markasi { get;set; }

        public Grup Grubu { get; set; }

        public string UrunResmi { get;set; }

        public decimal ListeFiyati { get;set; }

        public string UrunOzellikleri { get;set; }

        public Kullanicilar UrunuAlan { get;set; }

        public bool AktifMi { get; set; }

        public DateTime EklenmeTarihi { get;set; }

        public List<Resim>Resimler { get; set;}

    }

}

 

Ve buda sepete ekledigim her ürünün adetiyle birlikte tutmak için tanimladigim ikinci bir class SepettekiUrunler classi:

namespace EBuyLib.BTObjects

{

    public class SepettekiUrunler

    {

        public int UrunAdedi { get; set; }

        public Urun SepetUrunu { get;set; }

    }

}

 

Ürünleri listelemek için kullandigimiz Datalist

<asp:DataList runat="server" ID="dlSepet" CellPadding="4" ForeColor="#333333"

        onitemcommand="dlSepet_ItemCommand">

        <AlternatingItemStyle BackColor="White" ForeColor="#284775" />

        <ItemStyle BackColor="#F7F6F3" ForeColor="#333333" />

        <ItemTemplate>

            <div style="width:670px; border:1px solid #CCCCCC; padding:10px">

                <table id="tblSepet" border="0" cellpadding="0" cellspacing="0">

                    <tr>

                        <td style="width:50px">

                            <img style="width:50px; float:left" src='UrunResimleri/<%#Eval("SepetUrunu.UrunResmi")%>' alt="Alternate Text" />

                        </td>

                        <td class="en-iyi-fiyat">

                            <%#Eval("UrunAdedi")%> Adet

                        </td>

                        <td style="width:250px">

                             <span><%#Eval("SepetUrunu.UrunAdi")%></span>

                        </td>

                        <td>

                            <h2 class="Uc-Kutu-Fiyat"><%#Convert.ToDecimal(Eval("SepetUrunu.ListeFiyati")) * Convert.ToInt32(Eval("UrunAdedi"))%> TL</h2>

                        </td>

                        <td>

                            <asp:TextBox ID="txtAdet"  Width="30" CssClass="textBox" runat="server" />

                            <asp:Button CommandArgument='<%#Eval("SepetUrunu.UrunId")%>' CssClass="griButon" Height="28" Text="Güncelle" runat="server" />

                            <asp:Button CommandArgument='<%#Eval("SepetUrunu.UrunId")%>' ID="Button1" CssClass="griButon" Height="28" Text="Sil" runat="server" />

                        </td>

                    </tr>

                </table>

            </div>

        </ItemTemplate>

        <SelectedItemStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />

    </asp:DataList>

Datalistin en sonuna dikkat ederseniz, iki tane buton ve bir adet textbox ekledigimizi göreceksiniz. Bu textboxa kullanicidan bir ürün adeti girmesini isteyecegiz ve güncelle butonuna basildiginda ise sepetteki ürünün adetini o degere esitleyecegiz.Kullanici “sil” butonuna basarsa da, her basmada ürün sayisini bir azaltacagiz ve eger ürün sayisi 0’a esit olursa ürünü sepetten silecegiz.

Datalist içerisindeki bir kontrolün eventlarini kullanmak için, datalistin ItemCommand özelligini kullaniyoruz. Yani eger bir islem yapacaksak itemCommand özelliginin içerisinde yapabiliriz.

Ilk önce asagidaki kod ile sayfa yüklendiginde datalist kontrolümüze sessiondaki ürünleri yüklüyoruz:

protected void Page_Load(object sender, EventArgse)

        {

            if(!IsPostBack)

            {

                if(Session["Sepet"] != null)

                {

                    List<SepettekiUrunler> uList = ((List<SepettekiUrunler>)Session["Sepet"]);

                    if(uList.Count() == 0)

                        divSepet.InnerHtml = "<h2>Sepetinizde henüz ürünyok.</h2>";

                    else

                    {

                        dlSepet.DataSource =uList;

                        dlSepet.DataBind();

                        TutarYaz(uList);

                    }

                }

                else

                {

                    divSepet.InnerHtml = "<h2>Sepetinizde henüz ürünyok.</h2>";

                }

            }

        }

 

Datalistin itemlari içerisinde bulunan güncelle ve sil butonlarina basildiginda yapacagimiz islemler de bu kodda mevcut:

protected voiddlSepet_ItemCommand(object source, DataListCommandEventArgs e)

        {

            Buttonbtn = ((Button)e.CommandSource);

            List<SepettekiUrunler> urunList = (List<SepettekiUrunler>)Session["sepet"];

            SepettekiUrunlersu= urunList.Find(U => U.SepetUrunu.UrunId == Convert.ToInt32(e.CommandArgument));

            Kullanicilarkul=(Kullanicilar)Session["aktifKullanici"];

 

            if(btn.Text == "Sil")

            {

                if(su != null)

                {

                    if(su.UrunAdedi == 1)

                        urunList.Remove(su);

                    else

                       su.UrunAdedi=su.UrunAdedi - 1;

 

                   su.SetSepet(kul.KullaniciId, su.SepetUrunu.UrunId, -1);

                    Session["sepet"] = urunList;

                }

            }

            else

            {

                stringtext=((TextBox)e.Item.FindControl("txtAdet")).Text;

                if(IsNumeric(text))

                {

                    intadet = Convert.ToInt32(text);

                    su.UrunAdedi = adet;

                   su.SetSepet(kul.KullaniciId, su.SepetUrunu.UrunId, adet);

                    Session["sepet"] = urunList;

                    lblUyari.InnerText = "Geçerli bir adet giriniz!";

                    imgUyari.Visible = false;

                    lblUyari.Visible = false;

                }

                else

                {

                    lblUyari.InnerText = "Geçerli bir adet giriniz!";

                    imgUyari.Visible = true;

                    lblUyari.Visible = true;

                }

            }

 

            ((Label)Master.FindControl("lblSepet")).Text = "Sepetinizde " + urunList.Sum(F =>F.UrunAdedi).ToString() + " ürün var.";

            TutarYaz(urunList);

            dlSepet.DataSource = urunList;

            dlSepet.DataBind();

        }

Yukariya ekledigimiz kodu biraz açiklayalim. Simdi; kullanici datalist üzerindeki herhangi bir kontrole tikladiginda, veya herhangi bir olayi tetiklediginde kodumuz buraya düsecek.

ItemCommand metodunun ilk satirinda e.CommandSource nesnesini Buton nesnesine cast ediyoruz. Aslinda burada biz butona basildigindan emin oldugumuz için butona cast ediyoruz. Yani her nesneyi Butona vast etmemeliyiz, çünkü hatalarla karsilasabiliriz. Daha sonra butona atadigimiz id ile listeden o id’ye ait ürünü yakaliyoruz.

Eger basilan buton “Sil” butonuysa ve id’ ye ait ürün varsa listeden o ürünün adetini bir eksiltiyo ve eger adet “0” olmussa sepetten tamamen siliyo.

Eger basilan buton “Güncelle” ise textboxdaki degieri alip ürün adetini ona göre güncelliyor. Tabi bundan önce textboxa girilen degerin sayisal olup olmadigina bakiyor. Onu da asagidaki metodu kullanarak yapabilirsiniz:

public static bool IsNumeric(stringvalue)

{

    return Regex.IsMatch(value, "^\\d+$");

}

ASP.Net sepet güncelleme ve Datalist ItemCommand Özelligi adli makalemiz burada sonlaniyor. Anlamadiginiz veya anlatamadigimi düsündügünüz kisimlar varsa bana yazabilirsiniz. Her zaman yardimci olacagimdan emin olabilirsiniz.

Faydali olmasi temennilerimle, saglicakla kalin ;)

Bu yazıya yapılan yorumlar:

  • Erkan Yavuz

    02.10.2013 11:53

    Merhabalar, yaziniz tam aradigim makale ama benim ihtiyacim olan su. eger bu datalistte paging kullanirsak datalistin itemcommandini tetiklemiyor. Bu konuda yardimci olursaniz sevinirim... Kolay Gelsin

  • Ayaz

    10.07.2012 14:44

    Sagol emegine saglik keske kaynak dosya olarak inceliyip analiz edebilme sansimiz olsaydi

Siz de düşüncelerinizi yazabilirsiniz:

;