【问题标题】:Adding values of duplicate items添加重复项的值
【发布时间】:2013-09-23 16:21:30
【问题描述】:

我有一个购物车,目前目录页面允许用户添加重复的商品,只要包括购物车中已有商品在内的总数量低于最大值。这不是问题,问题是在购物车中,用户可以更改数量,如果有重复商品,则可以超过最大值。

我想要一个可以在文本更改事件上添加重复值的值的方法。

当我使用我为其他页面创建的方法时,我遇到了问题。添加时,会将购物车中存在重复的商品的总数量添加到用户添加的新数量中,这会导致结果倾斜。

这里是提到的方法:

public static bool getTotalQty(string sessionID, int ProductID, decimal Qty)
{
    double maxQty = 0;
    double totalQty = 0;
    bool isQtyValid = true;

    List<ShoppingCartDTO> shoppingList = ShoppingCart.Fetch(string.Format("WHERE SessionID='{0}'", sessionID));
    foreach (ShoppingCartDTO temp in shoppingList)
    {
         var qty = shoppingList.Where(item => item.ProductID == ProductID).Sum(item => item.Quantity);
         maxQty = getMax(ProductID);                   

         isQtyValid = maxQty == 0 ? true : CheckMaxQty(totalQty, maxQty);
     }
     if (!isQtyValid)
         break;

    return isQtyValid;
}

编辑:添加了新的 linq,我发现我的问题是总和是表中预先存在的数量,不排除它试图添加到总数量的值。所以我现在的问题是,我可以操纵 linq 语句在 qty_Changed 中工作,这样它就不会在表中查看它试图添加的值。因为它们不一定是最新的,因为文本框会是?

此方法中的两次调用只是检索最大值,然后比较找到的最大值和总数。

不确定你是否需要它,但这是我也有的文本更改事件:

public void qty_Changed(object sender, EventArgs e)
{
  bool isQtyValid = true;
  decimal qty = 0.0M;
  int productID = 0;
  int index = 0;

  string sessionID = Session["ID"].ToString();

  for (int x = 0; x < cart.Items.Count; x++)
  {
    RepeaterItem item = cart.Items[x];

    TextBox qtyText = (TextBox)item.FindControl("TxtQty");

    if (qtyText.Text != string.Empty)
    {
      qty = Convert.ToDecimal(qtyText.Text);
      productID = Convert.ToInt32(((Label)item.FindControl("lblProductID")).Text);

      isQtyValid = COMMONACES.GetValues.getTotalQty(sessionID, productID, qty, index);
    }

    ((Label)item.FindControl("lblQtyOverMax")).Visible = !isQtyValid;
    CheckOut.Enabled = isQtyValid;
    lblError.Visible = !isQtyValid;
    lblError.Text = isQtyValid ? string.Empty : "Your quantity for one or more items exceeds the maximum allowed. Please check the total quantity and make the needed adjustments.";

    if (!isQtyValid)
        break;
  }
}

任何可以帮助我的附加信息都可以尝试添加。

【问题讨论】:

  • 与论坛网站不同,我们不使用“谢谢”、“感谢任何帮助”或Stack Overflow 上的签名。请参阅“Should 'Hi', 'thanks,' taglines, and salutations be removed from posts?.
  • 您是否设置了断点并单步计算数量以确保它给您正确的数字?另外,我认为您可以使用 var qty = shoppingList.Where(item =&gt; item.ProductId == ProductID).Sum(item =&gt; item.Quantity); 之类的方式简化逻辑
  • @JimMischel 谢谢你的那句话!它没有解决我的问题,但它确实使代码更容易理解。我正在更新我的问题以及关于我发现的更多信息。

标签: c# asp.net duplicates


【解决方案1】:

使用@JimMischel 提供的新逻辑,我发现问题在于我只查找表的总和,而不是实时变量的总和。 我为解决这个问题所做的就是在调用之前添加一个更新调用,以检查数量是否超过最大值。这样,表格中的数量就会与网站上的内容保持同步。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-11
    • 2015-03-16
    • 1970-01-01
    • 2013-07-13
    • 2020-06-01
    • 2020-09-23
    • 1970-01-01
    相关资源
    最近更新 更多