查看: 776|回复: 6
|
关于shopping cart (CSharp)
[复制链接]
|
|
我在做着一个shopping cart, 我是用datatable 来store user 的 selection 再 assign 进 session 的。。
当我把session["cart"] 在另一个page 用repeater bind 的时候, 可以display .. 现在的问题是。。。我create 了一个button (Back) redirect 回去shopping cart 的 page 给user 在 add to cart.. 因为我是在page load 时 用 datatable make cart 的。。 所以每次一page laod.. 就开了一个新的cart 再assign 进session. 所以当去到另一个page 时。。 又是一个新的 cart record.. 之前的不在了。。 只能够用browser 的 Back 回去add 过。 那这样就能够add 一个new data row, 而不是一个new datatable.. 所以有没有其他办法可以在 loadpage 和 press btnADD 以外makeCart 吗?
////// pageload call makeCart()
private void makeCart()
{
objDT = new System.Data.DataTable();
objDT.Columns.Add("Ticket_Code", System.Type.GetType("System.String"));
objDT.Columns.Add("Theme", System.Type.GetType("System.String"));
//objDT.Columns.Add("Category", System.Type.GetType("System.String"));
objDT.Columns.Add("Adult_QTY", System.Type.GetType("System.Int32"));
objDT.Columns.Add("Child_QTY", System.Type.GetType("System.Int32"));
objDT.Columns.Add("adultUnitPrice", System.Type.GetType("System.String"));
objDT.Columns.Add("childUnitPrice", System.Type.GetType("System.String"));
objDT.Columns.Add("Total", System.Type.GetType("System.String"));
Session["Cart"] = objDT;
}
/////// addtoCart button
private void btnAdd_Click(object sender, System.EventArgs e)
{
decimal childTotal=0,adultTotal=0;
if (txtAdultQTY.Text != "" && txtChildQTY.Text == "")
adultTotal=addAdultCart();
if (txtChildQTY.Text != "" && txtAdultQTY.Text == "")
childTotal=addChildCart();
if (txtChildQTY.Text != "" && txtAdultQTY.Text != "")
{
adultTotal=addAdultCart();
childTotal=addChildCart();
objDT = (DataTable) Session["Cart"];
foreach(DataRow objDR in objDT.Rows)
{
if (objDR["Theme"].ToString() == ddlTheme.SelectedItem.Text.ToString() )
objDR["Total"] ="RM " + string.Format("{0:##.#0}",adultTotal + childTotal);
}
Session["Cart"] = objDT;
}
//////adultQTY_cart()
private decimal addAdultCart()
{
decimal total, adultUnitPrice,childUnitPrice;
int childQTY;
DataSet dsTheme = new DataSet();
string theme = ddlTheme.SelectedItem.Text.ToString();
dsTheme = myService.getAllThemePark(theme);
adultUnitPrice = decimal.Parse(dsTheme.Tables["ThemePark"].Rows[0]["adult_price"].ToString());
childUnitPrice = decimal.Parse(dsTheme.Tables["ThemePark"].Rows[0]["kids_price"].ToString());
bool blMatch = false;
objDT = (DataTable) Session["Cart"];
foreach (DataRow objDR in objDT.Rows)
{
if (objDR["Theme"].ToString() == theme)
{
objDR["Adult_QTY"] = int.Parse(objDR["Adult_QTY"].ToString()) + int.Parse(txtAdultQTY.Text);
lblAdultQTY.Text = objDR["Adult_QTY"].ToString();
total = int.Parse(objDR["Adult_QTY"].ToString()) * adultUnitPrice;
objDR["Total"] = "RM " + string.Format("{0:##.#0}",total);
blMatch = true;
// objDR["Adult"] = int.Parse(objDR["Adult"].ToString()) + int.Parse(txtQTY1.Text);
}
}
if(!blMatch)
{
objDR = objDT.NewRow();
objDR["Ticket_Code"] = dsTheme.Tables["ThemePark"].Rows[0]["ticketCode"].ToString();
objDR["Theme"] = dsTheme.Tables["ThemePark"].Rows[0]["themeDesc"].ToString();
//objDR["Category"] = "Adult - Web Price " + "RM " + unitPrice.ToString() ;
objDR["Adult_QTY"] = int.Parse(txtAdultQTY.Text);
childQTY = 0;
objDR["Child_QTY"] = childQTY;
objDR["adultUnitPrice"] = "RM " + string.Format("{0:##.#0}",adultUnitPrice);
objDR["childUnitPrice"] = "RM " + string.Format("{0:##.#0}",childUnitPrice);
total = int.Parse(txtAdultQTY.Text) * adultUnitPrice;
objDR["Total"] = "RM " + string.Format("{0:##.#0}",total);
objDT.Rows.Add(objDR);
lblAdultQTY.Text = objDR["Adult_QTY"].ToString();
i+=1;
}
total = adultUnitPrice * decimal.Parse(lblAdultQTY.Text);
Session["Cart"] = objDT ;
return total;
// Response.Write(objDR["QTY"].ToString());
}
////////childQTY_cart()
private decimal addChildCart()
{
decimal total, adultUnitPrice, childUnitPrice;
int adultQTY ;
DataSet dsTheme = new DataSet();
string theme = ddlTheme.SelectedItem.Text.ToString();
dsTheme = myService.getAllThemePark(theme);
bool blMatch = false;
childUnitPrice = decimal.Parse(dsTheme.Tables["ThemePark"].Rows[0]["kids_price"].ToString());
adultUnitPrice = decimal.Parse(dsTheme.Tables["ThemePark"].Rows[0]["adult_price"].ToString());
objDT = (DataTable) Session["Cart"];
foreach (DataRow objDR in objDT.Rows)
{
if ( objDR["Theme"].ToString() == theme)
{
objDR["Child_QTY"] = int.Parse(objDR["Child_QTY"].ToString()) + int.Parse(txtChildQTY.Text);
lblChildQTY.Text = objDR["Child_QTY"].ToString();
total = int.Parse(objDR["Child_QTY"].ToString()) * childUnitPrice;
objDR["Total"] = "RM " + string.Format("{0:##.#0}",total);
blMatch = true;
}
}
if (!blMatch)
{
objDR = objDT.NewRow();
objDR["Ticket_Code"] = dsTheme.Tables["ThemePark"].Rows[0]["ticketCode"].ToString();
objDR["Theme"] = dsTheme.Tables["ThemePark"].Rows[0]["themeDesc"].ToString();
//objDR["Category"] = "Adult - Web Price " + "RM " + unitPrice.ToString() ;
adultQTY = 0;
objDR["Adult_QTY"] = adultQTY;
objDR["Child_QTY"] = int.Parse(txtChildQTY.Text);
objDR["adultUnitPrice"] = "RM " + string.Format("{0:##.#0}",adultUnitPrice);
objDR["childUnitPrice"] = "RM " + string.Format("{0:##.#0}",childUnitPrice);
total = int.Parse(txtChildQTY.Text) * childUnitPrice;
objDR["Total"] = "RM " + string.Format("{0:##.#0}",total);
objDT.Rows.Add(objDR);
lblChildQTY.Text = objDR["Child_QTY"].ToString();
i+=1;
}
Session["Cart"] = objDT;
total = childUnitPrice * decimal.Parse(lblChildQTY.Text);
return total;
}
[ 本帖最后由 zuying1985 于 24-8-2006 11:15 AM 编辑 ] |
|
|
|
|
|
|
|
发表于 24-8-2006 11:35 AM
|
显示全部楼层
|
|
|
|
|
|
|
发表于 24-8-2006 11:43 AM
|
显示全部楼层
why want to use datatable to store information and retrieve???? just use session to store all individual value rather than store as a session object. i think should change Session["Cart"] = objDT
to
session['Child_QTY']
session['Adult_QTY']
session['adultUnitPrice']
and etc |
|
|
|
|
|
|
|

楼主 |
发表于 24-8-2006 11:48 AM
|
显示全部楼层
原帖由 8years 于 24-8-2006 11:43 AM 发表
why want to use datatable to store information and retrieve???? just use session to store all individual value rather than store as a session object. i think should change Session = objDT
to
se ...
因为user 会买几样东西的。用datatable 就能够把每一样东西的session store 进不同的row 鸟。。。 session 我不是很会用。。假如用Session 而已的话。是不是好像arraylist 般的用??? |
|
|
|
|
|
|
|

楼主 |
发表于 24-8-2006 11:58 AM
|
显示全部楼层
|
|
|
|
|
|
|
发表于 24-8-2006 12:16 PM
|
显示全部楼层
每一次在 load page 的时候, 你都得先把 session 里的 cart 拿出来.
我 assume 你每 load 一次, 就会呼叫 makeCart()
那么你的 makeCart()应该这样写:
private void makeCart()
{
if (Session["Cart"] == null) {
objDT = new System.Data.DataTable();
objDT.Columns.Add("Ticket_Code", System.Type.GetType("System.String"));
objDT.Columns.Add("Theme", System.Type.GetType("System.String"));
//objDT.Columns.Add("Category", System.Type.GetType("System.String"));
objDT.Columns.Add("Adult_QTY", System.Type.GetType("System.Int32"));
objDT.Columns.Add("Child_QTY", System.Type.GetType("System.Int32"));
objDT.Columns.Add("adultUnitPrice", System.Type.GetType("System.String"));
objDT.Columns.Add("childUnitPrice", System.Type.GetType("System.String"));
objDT.Columns.Add("Total", System.Type.GetType("System.String"));
Session["Cart"] = objDT;
}
} |
|
|
|
|
|
|
|

楼主 |
发表于 24-8-2006 12:21 PM
|
显示全部楼层
回复 #6 goatstudio 的帖子
对哦。。怎么没想到。。。 是真的傻了。。谢谢大大。。。
 |
|
|
|
|
|
|
| |
本周最热论坛帖子
|