计数器不会增加

时间:2016-02-29 21:08:30

标签: asp.net sql-server count increment

编码相对较新,因此代码中可能存在明显的错误。我想要做的是每次将新产品添加到购物篮时增加一个计数器。

当程序运行时,其默认值为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();
        }
    }

Counter

2 个答案:

答案 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();
    }
}