佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 776|回复: 6

关于shopping cart (CSharp)

[复制链接]
发表于 24-8-2006 10:56 AM | 显示全部楼层 |阅读模式
我在做着一个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 编辑 ]
回复

使用道具 举报


ADVERTISEMENT

发表于 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 | 显示全部楼层
原帖由 goatstudio 于 24-8-2006 11:35 AM 发表
写的很乱... 不太明白你的流程...



对不起了。。 第一次接触 C# 和 shopping cart.. 的确是很乱。。因为就是想到什么就写什么。。 也没去整理和思考整个shopping cart 的流程。。 就是想到什么,些什么,然后debug.. 有error 就去改。。时间紧迫的关系。。 现在功课是persent 了。。 有bug 的地方我不persent .. .. 因为shoping cart 不是这次assignment 的重点。。 重点只是要我们 apply web service 而已。。 恩。。 其实问题就是每一次page laod .. 就会Create 一个 datatable store user requested ( objDT) 然后 assign 进 Session ( Session["Cart"] ) 。。。 当user click -> Add To Cart 时, 就会create 一个 datarow (objDR) assign value 进去  DataTable(objDT) 的 dataRow (objDR) 里。。。 然后就 assign DataTable (objDT) 去 Session (Session["Cart"]), 然后 Redirect 去 另一个 page... 那个page 是用 repeater bind Session(Session["Cart"]) 来display  Cart Item.. 而 我是想create 一个button Redirect 回去 之前的 page , 当user 再 add to cart 是。。 是add 进 新的 dataRow(objDT) .. 而不是dataTable(objDT) .. 可是我是在 page load 时 create new dataTable 的。。 所以 一 load 的 时候 Session["cart"] 就被 新的 dataTable replace 了。。 所以就的Cart record 就不见 了。。
回复

使用道具 举报

发表于 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;
  }
}
回复

使用道具 举报

Follow Us
 楼主| 发表于 24-8-2006 12:21 PM | 显示全部楼层

回复 #6 goatstudio 的帖子

对哦。。怎么没想到。。。 是真的傻了。。谢谢大大。。。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 12-8-2025 06:39 PM , Processed in 0.101833 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表