Asp.net alışveriş sepeti yaptım fakat alışverişi tamamla kısmını nasıl yapacağımı bulamadım ?

ImInvisible

Yeni üye
15 Tem 2016
12
0
Muğla
SA.

ASP.NET alışveriş sistemi yapıyorum. Sepeti sessionlarla yaptım.

Sepete ürün ekleme kodlarım bunlar :

public **** Ekle(string id, string model, int adet, int fiyat)
{
if (!Page.IsPostBack)
{
DataTable dt = new DataTable(); // Sepeti tutacağımız bir dt oluşturuyoruz.

if (HttpContext.Current.Session["Sepet"] != null) // daha önceden sepet oluşturulmuşmu diye bakıyoruz.
{
dt = (DataTable)HttpContext.Current.Session["Sepet"]; // session varsa sessionu dt ye aktar.

}
else //session yok ise yani sepet daha önce oluşturulmamışsa eğeter dtyi oluşturuyoruz.
{
dt.Columns.Add("id"); // Dt ye id colonunu ekliyoruz.
dt.Columns.Add("Model");
dt.Columns.Add("Fiyat");
dt.Columns.Add("Adet");
dt.Columns.Add("Tutar");
}

bool varmi = Kontrol(id.ToString());//kontrol methoda gelen id değeri gönderdik böylece aynı id ye sahip olup olmadığını kontrol ediyor ürün varsa adeti arttırır.

if (varmi == false)
{
DataRow drow = dt.NewRow();
drow["id"] = id;
drow["Model"] = model;
drow["Fiyat"] = fiyat;
drow["Adet"] = adet;
drow["Tutar"] = (fiyat * adet).ToString();

dt.Rows.Add(drow);
}
else
{

//Artir(id, adet, fiyat);//eğer ürün varsa adetini arttır.
}

HttpContext.Current.Session["Sepet"] = dt;



}

}

public double SepetToplam()
{
double toplam = 0;
if (HttpContext.Current.Session["Sepet"] != null)
{
DataTable dt = new DataTable();
dt = (DataTable)HttpContext.Current.Session["Sepet"];
for (int i = 0; i < dt.Rows.Count; i++)
{
toplam += Convert.ToDouble(dt.Rows["Tutar"].ToString());

}
}
return toplam;


}


public **** Sil(string id)
{
DataTable dt = new DataTable();
if (HttpContext.Current.Session["Sepet"] != null)
{
dt = (DataTable)HttpContext.Current.Session["Sepet"];
for (int i = 0; i < dt.Rows.Count; i++)
{
if (dt.Rows["id"].ToString() == id)
{
dt.Rows.Delete();
HttpContext.Current.Session["Sepet"] = dt;
break;
}
}
}
}


private bool Kontrol(string id)
{
bool r = false;
DataTable dt = new DataTable();
if (HttpContext.Current.Session["Sepet"] != null)
{
for (int i = 0; i < dt.Rows.Count; i++)
{
if (dt.Rows["id"].ToString() == id)
{
r = true;
break;
}
}
}
return r;
}


private **** SepetGetir()
{
if (Session["Sepet"] != null)
{
DataTable dt = new DataTable();
dt = (DataTable)Session["Sepet"];
rptSepetCek.DataSource = dt.DefaultView;
rptSepetCek.DataBind();
lblToplam.Text = "TOPLAM : " + SepetToplam().ToString() + " TL";
}


}
protected **** rptSepetCek_ItemCommand(object source, RepeaterCommandEventArgs e)
{
if (e.CommandName.ToString() == "sil")//command name sil ise
{
Sil(e.CommandArgument.ToString());//yazdığımız sil methoduna o anki ürünün id değerini gönderiyoruz
SepetGetir();// sepetin son halini birdaha ekrana getiriyoruz
}
}

------------------------------------------------------------------------------------

Fakat bir sorunum var ben sepete istediğim kadar veri ekletiyorum burada sorun yok ama alışverişi tamamla kısmını nasıl yapacağımı bulamadım bi fikirde geliştiremedim. Fikri olan veya daha önce yapmış arkadaşlar lütfen bi yardım edermisiniz ? :confused:
 

ImInvisible

Yeni üye
15 Tem 2016
12
0
Muğla
private **** SepetGetir()
{
if (Session["Sepet"] != null)
{
DataTable dt = new DataTable();
dt = (DataTable)Session["Sepet"];
Session.Add("Sepetiki", dt);
rptSepetCek.DataSource = dt.DefaultView;
rptSepetCek.DataBind();
lblToplam.Text = "TOPLAM : " + SepetToplam().ToString() + " TL";
}


}

SepetGetir metodunun içine yeni bir session ekleyip sorunu halletim ve diğer sayfalarda kullanabiliyorum ;)
 

xenceri

Uzman üye
16 Ağu 2010
1,948
0
İstanbul
Tam olarak ne istediğini anlamadım ama eğer istediğin şey online alışveriş ise bu durumda googleda aspnet online payment diye aratabilirsin. Ek olarak projende pratik olsun diye metodları kullanmışsın ama aslında bu çok da pratik olmamış :) Sürekli dt lerle uğraşsın ve bunu başka yerde kullanacağın zaman yine bu datatable lar başını ağrıtacaktır ve aslına bakarsan session a bir datatable atamak yerine direk veritabanına kaydedip çekmen daha hızlı olacaktır. AspNette zorunlu olmadığın sürece (ki ben nerdeyse hiç kullanmam) session kullanmanı önermem. Bunun yerine düzenli bir class yapısı kullanman daha sağlıklı olacaktır.
Şöyle örnek vereyim mesela bak.

public class Sepet
{
//Önce Sepet adında bir class tanımladık ve bu classın başlangıç metodunu olarak da yine Sepet adında bir metod oluşturduk ki bu aslında standart bir kullanımdır. Bir classın içine her zaman yapıcı metodu da oluşturman iyi olacaktır. Bu metodun olayı ise şudur. Sen Sepet spt = new Sepet() dediğin anda **** Sepet() metodu otomatik çalışır ve gerekli işlemleri yapar. Neyse ben Sepet metodunu boş bıraktık ve kullanacağımız veriler için public değişkenler tanımladık. Ondan sonra mesela verileri çekmek için bir metod oluşturduk.
public **** Sepet()
{
}

//Bu metod bize Sepet türünde bir Liste döndürecek ve int türünde id değeri istiyor bu id değeri aslında üyenin id numarası. Yani üyeye ait Sepetleri çekecez.
public IEnumerable<Sepet> VerileriGetir(int id)
{
DataTable dt = new DataTable();
//Burada artık klasik veritabanı işlemleri olacak. Önce bir datatable oluşturduk ve veritabanı sorgularından sonra veriler artık dataadapter.fill(dt) ile tablomuza gelecek.

//Sonrasında bizim geri dönüş listemiz olan Veriler i oluşturduk.
ArrayList Veriler= new ArrayList();

for (int i = 0; i < dt.Rows.Count; i++)
{
Veriler.Add(new Sepet { Adet = (int)dt.Rows["Adet"], Fiyat = 5, ID = 1, Model = "yine dtden çekecen veriyi", Tutar = (Fiyat * Adet).ToString() });
}
//Sonuç olarak artık tüm veriler liste'de duracaktır ve bunu return ederek kullanırsın.
return (IEnumerable<Sepet>)Veriler;
}
public int ID { set; get; }
public string Model { set; get; }
public float Fiyat { set; get; }
public int Adet { set; get; }
public string Tutar { set; get; }
}


//Kullanırken de
Sepet sepet = new Sepet();
IEnumerable<Sepet> Veriler = sepet.VerileriGetir(5);
foreach (Sepet item in Veriler)
{
Response.Write(item.Model);
//Bu şekilde de istediğin verideki değeri kullanabilirsin
}
 

ImInvisible

Yeni üye
15 Tem 2016
12
0
Muğla
Tam olarak ne istediğini anlamadım ama eğer istediğin şey online alışveriş ise bu durumda googleda aspnet online payment diye aratabilirsin. Ek olarak projende pratik olsun diye metodları kullanmışsın ama aslında bu çok da pratik olmamış :) Sürekli dt lerle uğraşsın ve bunu başka yerde kullanacağın zaman yine bu datatable lar başını ağrıtacaktır ve aslına bakarsan session a bir datatable atamak yerine direk veritabanına kaydedip çekmen daha hızlı olacaktır. AspNette zorunlu olmadığın sürece (ki ben nerdeyse hiç kullanmam) session kullanmanı önermem. Bunun yerine düzenli bir class yapısı kullanman daha sağlıklı olacaktır.
Şöyle örnek vereyim mesela bak.

verdiğin bilgiler için teşekkür ederim :)
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.