У меня есть корзина для покупок, и в настоящее время страницы каталога позволяют пользователю добавлять повторяющиеся элементы, пока общее количество, включая то, что уже находится в корзине, находится под максимальным значением. Это не проблема, проблема в том, что в корзине покупок пользователь может изменить количество и может превышать максимальный, если есть повторяющиеся элементы.Добавление значений повторяющихся элементов
Мне нужен метод, который может добавлять значения повторяющихся значений в событие с измененным текстом.
Когда я использую метод, который я создал для других страниц, у меня возникают проблемы. При добавлении общее количество, находящееся в корзине покупок, будет иметь дубликат в корзине и добавит его в новое количество, добавленное пользователем, что исказит результаты.
Вот метод упоминается:
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;
}
EDIT: С новой LINQ добавил я вижу, моя проблема заключается в том, что сумма количества уже существующих в таблице, не исключая стоимость ее пытаются добавить общее количество. Итак, теперь мой вопрос: могу ли я манипулировать оператором linq для работы в qty_Changed, чтобы он не смотрел таблицу на значения, которые он пытался добавить. Поскольку они не обязательно будут обновляться, поскольку текстовые поля будут ?
Два вызова этого метода предназначены только для получения максимального значения, а затем для сравнения найденного значения max и total.
Не уверен, что, если вам это нужно, но вот изменить текст, событие, которое у меня есть, а также:
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;
}
}
Любая дополнительная информация, которая поможет я могу попробовать и добавить.
В отличие от форумов, мы не используем «Спасибо» или «Любая помощь оценена» или подписи на [so]. См. «[Должны ли« Привет »,« спасибо », теги и приветствия удалены из сообщений?] (Http://meta.stackexchange.com/questions/2950/should-hi-thanks-taglines-and-salutations-be -removed-from-posts). –
Установили ли вы точку останова и одноэтапную, где вычисляется количество, чтобы убедиться, что оно дает вам правильное число? Кроме того, я думаю, что вы можете упростить свою логику с помощью чего-то типа 'var qty = shoppingList.Where (item => item.ProductId == ProductID) .Sum (item => item.Quantity); ' –
@JimMischel Спасибо за эту строку! Он не решил мою проблему, но он, несомненно, упростил код чтобы следить. Я обновляю свой вопрос с этим и больше информации о том, что я нашел. –