就这个错误而言,我将尽可能准确和具有描述性,就目前我所知,它似乎是随机的。
为了提供一些背景信息,我正在建立一个在线商店,用户点击“添加”按钮,从我的gridview的模板字段中将项目添加到他们的购物车。这将获取他们想要购买的商品并将其插入购物车数据库表格,然后当点击“cart'icon”以显示内容时,此表格将通过gridview显示。
现在,当用户点击该项目时,将运行检查以确保该项目尚未出现在购物篮中。如果它在那里它将其更新为新的金额,如果不是,则将其插入购物车数据库,同时更新标签以显示项目数量。 这一切都很好,除了我有一个令人沮丧的错误,有时按钮只是在点击项目时不会添加或更新购物车或标签总数。这似乎发生在最常见的第一个网格项目。
我已经通过了调试器,似乎一切正常,正在从gridrow获取正确的ID等。我想知道它是否是某种回发问题
在site master onload方法中设置购物车内容的代码,load方法:
protected void Page_Load(object sender, EventArgs e)
{
if (Session["usersName"] != null)
{
object a = Session["_id"];
IDMaster = Convert.ToInt32(a);
UserWelcome.Text = "Welcome back " + Session["usersName"].ToString();
cartButton.Visible = true;
Label1.Visible = true;
Label2.Visible = true;
memberLogin.Visible = false;
LblOr.Visible = false;
lblPlease.Visible = false;
memberLogin.Visible = false;
memberReg.Visible = false;
}
else
{
cartButton.Visible = false;
Label1.Visible = false;
Label2.Visible = false;
UserWelcome.Visible = false;
memberLogin.Visible = true;
memberLogout.Visible = false;
LblOr.Visible = true;
lblPlease.Visible = true;
memberLogin.Visible = true;
memberReg.Visible = true;
MenuItem foo = NavigationMenu.FindItem("My Orders"); // your particular item
NavigationMenu.Items.Remove(foo);
}
setCart();
}
private void setCart()
{
int cartItems;
string cartNos;
SqlConnection sqlcon = new SqlConnection(connString);
SqlCommand sqlcmd = new SqlCommand("SELECT * FROM contents WHERE memberID = " + IDMaster + "", sqlcon);
SqlDataAdapter adp = new SqlDataAdapter(sqlcmd);
DataSet ds = new DataSet();
adp.Fill(ds);
if (ds.Tables[0].Rows.Count > 0)
{
cartItems = ds.Tables[0].Rows.Count;
cartNos = cartItems.ToString();
Label1.Text = cartNos;
}
else
{
int noItems = 0;
string convertEmptyItems;
convertEmptyItems = noItems.ToString();
Label1.Text = convertEmptyItems;
}
}
用于添加或更新购物车的代码,具体取决于商品是否已经存在:
GridViewRow row = ((Button)sender).Parent.Parent as GridViewRow;
TextBox t = (TextBox)row.FindControl("txtQuan");
object ID = GridView1.DataKeys[row.RowIndex].Value;
rowID = Convert.ToInt32(ID);
ViewState["ID"] = rowID;
string qty = t.Text;
int stockToAdd = Convert.ToInt32(qty);
DBHandler add = new DBHandler(rowID);
int qtyCheck = add.getStockQty();
if (stockToAdd > qtyCheck)
{
Button2_ModalPopupExtender.Show();
}
else{
SqlConnection con;
con = add.openDB();
con.Open();
DBHandler idCheck = new DBHandler(rowID);
int rows = idCheck.checkCartRows();
if (rows > 0)
{
int qtyNow = idCheck.getCartQty();
int updateStock = qtyNow + stockToAdd;
idCheck.updateQty(rowID, updateStock);
updatePanel();
}
else
{
idCheck.insertCart(IDMaster, qty);
updatePanel();
}
add.close();
DBHandler updateCart = new DBHandler(IDMaster);
int newRows = updateCart.checkCartRowsAfterUpdate();
string numberOfRows = newRows.ToString();
((Label)this.Master.FindControl("Label1")).Text = numberOfRows;
}
}
很抱歉对这个问题含糊不清,但我真的可以把它搞定!希望有人能看到我做错的事。
答案 0 :(得分:0)
好的排序了。原来这是我错过的东西。基本上,当我显示我的购物车内容时,我正在为所有会员推车显示它。这让我感到困惑,因为此时它正在添加该项目。我的购物车'将仅显示通过会话变量登录的特定成员的内容。当我的购物车检查项目是否已被添加时,它看到所有成员都添加了所有项目,所以当然如果另一个成员已经在购物车中添加了该项目,那么它永远不会添加它,它只是要更新它,因为它是为其他成员添加标签没有更新。一旦我删除了购物车内容,我就可以添加它。所以基本上我现在修复了我的代码,以便每个项目都有添加它的成员的相应ID,并且工作正常。
这里的关键规则是检查代码的所有进程,查找缺少的愚蠢内容。