编码相对较新,因此代码中可能存在明显的错误。我想要做的是每次将新产品添加到购物篮时增加一个计数器。
当程序运行时,其默认值为0,当您单击要添加到购物篮的第一个产品时,它会增加到1,但是,如果您添加更多产品,它会粘贴在1而不是增加每个产品时间。
我已经包含了下面的代码 - 是否有一个明显的错误我看起来是一个新手(我将是第一个尝试哈哈!)。任何时候都不会抛出任何错误消息。
protected void BtnAddToBasket_Click(object sender, EventArgs e)
{
string ProductID = Convert.ToInt16((((Button)sender).CommandArgument)).ToString();
string ProductStock = "1";
DataListItem currentItem = (sender as Button).NamingContainer as DataListItem;
Label lblAvailableStock = currentItem.FindControl("lblAvailableStock") as Label;
if (Session["MyBasket"] != null)
{
DataTable dt = (DataTable)Session["My Basket"];
var checkProduct = dt.AsEnumerable().Where(r => r.Field<string>("ProductID") == ProductID);
if (checkProduct.Count() == 0)
{
string query = "SELECT * FROM Product WHERE ProductID = " + ProductID + "";
DataTable dtProduct = GetData(query);
DataRow dr = dt.NewRow();
dr["ProductID"] = ProductID;
dr["ProductName"] = Convert.ToString(dtProduct.Rows[0]["ProductName"]);
dr["ProductDescription"] = Convert.ToString(dtProduct.Rows[0]["ProductDescription"]);
dr["ProductPrice"] = Convert.ToString(dtProduct.Rows[0]["ProductPrice"]);
dr["ProductStock"] = ProductStock;
dr["ProductImageUrl"] = Convert.ToString(dtProduct.Rows[0]["ProductImageUrl"]);
dr["AvailableStock"] = lblAvailableStock;
dt.Rows.Add(dr);
Session["MyBasket"] = dt;
btnShoppingBasket.Text = dt.Rows.Count.ToString();
}
}
else
{
string query = "SELECT * FROM Product WHERE ProductID =" + ProductID + "";
DataTable dtProduct = GetData(query);
DataTable dt = new DataTable();
dt.Columns.Add("ProductID", typeof(string));
dt.Columns.Add("ProductName", typeof(string));
dt.Columns.Add("ProductDescription", typeof(string));
dt.Columns.Add("ProductPrice", typeof(string));
dt.Columns.Add("ProductStock", typeof(string));
dt.Columns.Add("ProductImageUrl", typeof(string));
dt.Columns.Add("AvailableStock", typeof(string));
DataRow dr = dt.NewRow();
dr["ProductID"] = ProductID;
dr["ProductName"] = Convert.ToString(dtProduct.Rows[0]["ProductName"]);
dr["ProductDescription"] = Convert.ToString(dtProduct.Rows[0]["ProductDescription"]);
dr["ProductPrice"] = Convert.ToString(dtProduct.Rows[0]["ProductPrice"]);
dr["ProductStock"] = ProductStock;
dr["ProductImageUrl"] = Convert.ToString(dtProduct.Rows[0]["ProductImageUrl"]);
dr["AvailableStock"] = lblAvailableStock;
dt.Rows.Add(dr);
Session["My Basket"] = dt;
btnShoppingBasket.Text = dt.Rows.Count.ToString();
}
}
答案 0 :(得分:1)
从我看来,每次将项目添加到购物篮中时,您都会创建新购物篮。小错误是您在会话中使用保存的篮子条目的不同名称:
location.href="http://google.com"
第一次这是假的,所以它会进入else块。
if (Session["MyBasket"] != null)
在这里,您可以使用不同的密钥存储新的DataTable。所以下一次if语句仍然是假的。所以只需确保名称一致。 Session["My Basket"] = dt;
答案 1 :(得分:0)
修正了“MyBasket”是“我的篮子”的地方;减少代码重复。拼写错误是使用常量而不是字符串文字的一个令人信服的理由。
protected void BtnAddToBasket_Click(object sender, EventArgs e)
{
string ProductID = Convert.ToInt16((((Button)sender).CommandArgument)).ToString();
string ProductStock = "1";
DataListItem currentItem = (sender as Button).NamingContainer as DataListItem;
Label lblAvailableStock = currentItem.FindControl("lblAvailableStock") as Label;
if (Session["MyBasket"] == null)
{
DataTable dt = new DataTable();
dt.Columns.Add("ProductID", typeof(string));
dt.Columns.Add("ProductName", typeof(string));
dt.Columns.Add("ProductDescription", typeof(string));
dt.Columns.Add("ProductPrice", typeof(string));
dt.Columns.Add("ProductStock", typeof(string));
dt.Columns.Add("ProductImageUrl", typeof(string));
dt.Columns.Add("AvailableStock", typeof(string));
}
DataTable dt = (DataTable)Session["MyBasket"];
var checkProduct = dt.AsEnumerable().Where(r => r.Field<string>("ProductID") == ProductID);
if (checkProduct.Count() == 0)
{
string query = "SELECT * FROM Product WHERE ProductID = " + ProductID + "";
DataTable dtProduct = GetData(query);
DataRow dr = dt.NewRow();
dr["ProductID"] = ProductID;
dr["ProductName"] = Convert.ToString(dtProduct.Rows[0]["ProductName"]);
dr["ProductDescription"] = Convert.ToString(dtProduct.Rows[0]["ProductDescription"]);
dr["ProductPrice"] = Convert.ToString(dtProduct.Rows[0]["ProductPrice"]);
dr["ProductStock"] = ProductStock;
dr["ProductImageUrl"] = Convert.ToString(dtProduct.Rows[0]["ProductImageUrl"]);
dr["AvailableStock"] = lblAvailableStock;
dt.Rows.Add(dr);
Session["MyBasket"] = dt;
btnShoppingBasket.Text = dt.Rows.Count.ToString();
}
}