2013-09-18 3 views
0

У меня есть корзина для покупок, и в настоящее время страницы каталога позволяют пользователю добавлять повторяющиеся элементы, пока общее количество, включая то, что уже находится в корзине, находится под максимальным значением. Это не проблема, проблема в том, что в корзине покупок пользователь может изменить количество и может превышать максимальный, если есть повторяющиеся элементы.Добавление значений повторяющихся элементов

Мне нужен метод, который может добавлять значения повторяющихся значений в событие с измененным текстом.

Когда я использую метод, который я создал для других страниц, у меня возникают проблемы. При добавлении общее количество, находящееся в корзине покупок, будет иметь дубликат в корзине и добавит его в новое количество, добавленное пользователем, что исказит результаты.

Вот метод упоминается:

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; 
    } 
} 

Любая дополнительная информация, которая поможет я могу попробовать и добавить.

+3

В отличие от форумов, мы не используем «Спасибо» или «Любая помощь оценена» или подписи на [so]. См. «[Должны ли« Привет »,« спасибо », теги и приветствия удалены из сообщений?] (Http://meta.stackexchange.com/questions/2950/should-hi-thanks-taglines-and-salutations-be -removed-from-posts). –

+1

Установили ли вы точку останова и одноэтапную, где вычисляется количество, чтобы убедиться, что оно дает вам правильное число? Кроме того, я думаю, что вы можете упростить свою логику с помощью чего-то типа 'var qty = shoppingList.Where (item => item.ProductId == ProductID) .Sum (item => item.Quantity); ' –

+0

@JimMischel Спасибо за эту строку! Он не решил мою проблему, но он, несомненно, упростил код чтобы следить. Я обновляю свой вопрос с этим и больше информации о том, что я нашел. –

ответ

0

С новой логикой, предоставленной @JimMischel, я обнаружил, что проблема в том, что я искал только сумму таблицы, а не сумму живых переменных. Что я сделал для решения этой проблемы, так это добавить вызов обновления перед вызовом, чтобы проверить, превышено ли количество. Таким образом, количество в таблице остается в курсе того, что находится на сайте.

Смежные вопросы