ショッピング カートを持っていますが、現在、カタログ ページでは、既にカートに入っているものを含む合計数量が最大値を下回っている限り、ユーザーが重複したアイテムを追加できます。それは問題ではありません。問題は、ショッピング カートで、ユーザーが数量を変更でき、アイテムが重複している場合に最大数を超える可能性があることです。
テキスト変更イベントで重複値の値を追加できるメソッドが必要です。
他のページ用に作成したメソッドを使用すると、問題が発生します。追加する場合、ショッピング カートに重複するアイテムの合計数量が取り込まれ、ユーザーが追加した新しい数量に追加されるため、結果が歪められます。
言及された方法は次のとおりです。
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で動作するようにすることはできますか? ?
このメソッドの 2 つの呼び出しは、最大値を取得し、見つかった最大値と合計を比較するだけです。
必要かどうかはわかりませんが、私が持っているテキスト変更イベントも次のとおりです。
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;
}
}
私が試して追加するのに役立つ追加情報。