读书人

通过hashtable和seesion操作购物车解决

发布时间: 2012-06-10 14:03:15 作者: rapoo

通过hashtable和seesion操作购物车
我要把我的库存表信息通过下单添加到缓存表里面,现在库存表里面有两个主键卡号 cn_id和 卡号简写 e_reg。
Hashtable hstable;
if (Session["ShopCart"] == null)
{
hstable = new Hashtable();
hstable.Add(cn_id, Depotname); //添加一个项
Session["ShopCart"] = hstable;
}
else
{
//用户已经有购物车
hstable = (Hashtable)Session["ShopCart"];
if (hstable.Contains(cn_id) && hstable.Values.Equals(hstable[cn_id].ToString())) //如果表内有此该仓库下的卡号,不添加项
{
//int count = Convert.ToInt32(hstable[cn_id].ToString());
//hstable[cn_id] = count + 1;
}
else
hstable.Add(cn_id, Depotname); //如果没有此卡号,则新添加一个项
Session["ShopCart"] = hstable;
}
Response.Redirect("shopcart.aspx");
到shopcart.aspx.cs里面添加数据
//取出存入Hashtable
Hashtable hsCart = (Hashtable)Session["ShopCart"];
if (hsCart.Count == 0)
{
TABLE1.Visible = false;
Panel1.Visible = true;
}
else
{
DataTable dtTable = new DataTable();
DataColumn c1 = new DataColumn("No");
DataColumn c2 = new DataColumn("CardId");
DataColumn c3 = new DataColumn("DepotID");
DataColumn c4 = new DataColumn("Depotname");
DataColumn c5 = new DataColumn("Num");
DataColumn c6 = new DataColumn("Price");
DataColumn c7 = new DataColumn("TotalPrice");

dtTable.Columns.Add(c1);
dtTable.Columns.Add(c2);
dtTable.Columns.Add(c3);
dtTable.Columns.Add(c4);
dtTable.Columns.Add(c5);
dtTable.Columns.Add(c6);
dtTable.Columns.Add(c7);


DataRow row;
//对数据表中进行启遍历,循环为第一列赋新值
foreach (object key in hsCart.Keys)
{
row = dtTable.NewRow();
row["CardId"] = key.ToString();
//row["Num"] = hsCart[key].ToString();
row["Depotname"] = hsCart[key].ToString();
dtTable.Rows.Add(row);
}

int i = 1; //序号
decimal price; //商品单价
int count; // 商品数量
decimal totalPrice = 0; //总数量
Model.Web_StockModel model = new Model.Web_StockModel();

foreach (DataRow drRow in dtTable.Rows)
{
string myRow = drRow["CardId"].ToString();
string myRow1 = drRow["Depotname"].ToString(); 问:根据卡号和库存名会查出来多行数据 在这里不知道怎么实现多行插入库存表


model.cn_id = myRow;
model.Depotname = myRow1;
DataSet ds = BLL.Web_StockBLL.CheckWebStockByCNID(model);
for (int j = 0; j < ds.Tables[0].Rows.Count; j++)
{
drRow["No"] = i;
drRow["DepotID"] = ds.Tables[0].Rows[j]["ID"].ToString();
if (i == 1)
{
ViewState["Depotname"] = drRow["Depotname"].ToString();
}
drRow["Price"] = ds.Tables[0].Rows[j]["cn_stdprice"].ToString();
price = decimal.Parse(drRow["Price"].ToString());
//count = Convert.ToInt32(drRow["Num"]);//获得数目
count = 1;//获得数目
drRow["Num"] = count;
drRow["TotalPrice"] = price * count;
totalPrice += price * count;
i++;//序号加一
}
}
lblTotal.Text = string.Format("{0:c}", totalPrice);
ddlDepotname.DataSource = dtTable.DefaultView;
ddlDepotname.DataTextField = "Depotname";
ddlDepotname.DataValueField = "Depotname";
if ("".Equals(str))
ddlDepotname.SelectedValue = ViewState["Depotname"].ToString();
else
ddlDepotname.SelectedValue = str;
ddlDepotname.DataBind();

dtTable.DefaultView.RowFilter = " Depotname like '%" + ddlDepotname.SelectedItem.Value + "%'";
GridView1.DataSource = dtTable.DefaultView;
GridView1.DataKeyNames = new string[] { "CardId" };
GridView1.DataBind();
}


问:现在要根据两个条件 也就是库存表那两个主键值来删除 但是hashtable对象中的参数只能有一个键值,也就是根据一个条件做删除缓存信息
/// <summary>
/// 行内事件.删除
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
int cardId = Convert.ToInt32(e.CommandArgument);
string name = e.CommandName.ToString();
if (name == "del")
{
Hashtable hsCart = Session["ShopCart"] as Hashtable;
hsCart.Remove(cardId);//cardid 键值
}
GetShopCart("");
}

[解决办法]
用List 泛型吧

读书人网 >asp.net

热点推荐