2016-12-28 2 views
-1

Я хочу создать простой интернет-магазин, в котором можно купить несколько предметов. Вот мой кодКак создать Добавить в корзину

public void BuyItem(int deviceid, int quantity) 
    { 
     Dictionary<int, int> devicelist = new Dictionary<int, int>(); 
     devicelist.Add(deviceid, quantity); 

     Device devices = (from device in master.Devices 
         where device.IDDevice == deviceid 
         select device).SingleOrDefault(); 
     customer = os.GetCustomer(User); 
     //List<CartShop> cartList = new List<CartShop>(); 
     //var toCart = devices.ToList(); 
     //foreach (var dataCart in toCart) 
     //{ 
      cartList.Add(new CartShop 
      { 
       IDDevice = deviceid, 
       IDLocation = devices.IDLocation, 
       IDCustomer = customer, 
       Name = devices.Name, 
       Quantity = quantity, 
       Price = Convert.ToInt32(devices.Price) * quantity 
      }); 
      cartTotal = cartList; 
      StoreTransaksi.DataSource = new BindingList<CartShop>(cartTotal); 
      StoreTransaksi.DataBind(); 
     //} 
     X.Msg.Show(new MessageBoxConfig 
     { 
      Buttons = MessageBox.Button.OK, 
      Icon = MessageBox.Icon.INFO, 
      Title = "INFO", 
      Message = "Success" 
     }); 
    } 

Но это только может добавить 1 пункт, после того, как выбрать другой элемент, он заменит старый. (Не удалось добавить более одного). Пожалуйста, помогите

+0

это может происходить, так как каждый раз, когда метод BuyItem вызывается Карлистские может получать инициализируется каждый раз, – abhi

+0

Вот почему я сделать еще Список 'cartTotal = cartList'; который хранит то, что находится в cartList. Но он все еще не работает – Allegra

+1

Я предполагаю, что cartList инициализируется в событии PageInit или PageLoad, поэтому он каждый раз новый. 'cartTotal = cartList' просто копирует один список в другой. Вы должны сохранить carList в сеансе ... – Nino

ответ

1

Проблема в том, что cartTotal такой же, как cartList (см. this). Вам нужно сделать следующее для копирования списка в другой без сохранения ссылки:

cartTotal = new list<cartShop>(cartList); 

Также обратите внимание, что это все еще в способе и будет создаваться каждый раз, когда вы вызов метода.

Update: Это очень простое консольное приложение, которое делает то, что вам нужно:

internal class Program 
{ 
    public static List<Item> ShoppingCart { get; set; } 

    public static void Main() 
    { 
     ShoppingCart = new List<Item>(); 
     AddToCart(new Item() { ProductId = 2322, Quantity = 1 }); 
     AddToCart(new Item() { ProductId = 5423, Quantity = 2 }); 
     AddToCart(new Item() { ProductId = 1538, Quantity = 1 }); 
     AddToCart(new Item() { ProductId = 8522, Quantity = 1 }); 
    } 

    public static void AddToCart(Item item) 
    { 
     ShoppingCart.Add(new Item() { ProductId = item.ProductId, Quantity = item.Quantity}); 
    } 
} 

public class Item 
{ 
    public int ProductId { get; set; } 
    public int Quantity { get; set; } 
} 
+0

Он все еще не работает, carTotal все еще начинается с 0 и не сохраняет старое значение. cartList и carTotal являются глобальными переменными – Allegra

+0

Если cartList глобальный, для чего нужен cartTotal? Просто удалите 'cartTotal = cartList;' – Mahdi

+0

cartTotal предназначен для копирования списка из cartList, поскольку он всегда новый каждый раз. Я был удален 'cartTotal = cartList;' – Allegra

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