2016-12-28 7 views
-1

Je veux faire un magasin en ligne simple qui peut acheter plusieurs articles. Voici mon codeComment créer ajouter au panier

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

Mais il ne peut ajouter 1 élément, choisissez après l'autre élément, il remplace l'ancien. (Impossible d'ajouter plus d'un). S'il vous plaît aider

+0

cela peut se produire car chaque fois que la méthode de BuyItem est invoquée carliste peut s'Initialisé à chaque fois, – abhi

+0

Voilà pourquoi je fais une autre Liste 'cartTotal = cartList'; ce magasin ce qui est dans cartList. Mais ça ne marche toujours pas – Allegra

+1

Je suppose que cartList est initialisé dans l'événement PageInit ou PageLoad, donc c'est nouveau à chaque fois. 'cartTotal = cartList' copie juste une liste dans une autre. Vous devriez garder carList dans la session ... – Nino

Répondre

1

Le problème est que cartTotal est le même que cartList (jetez un oeil à this). Vous devez faire ce qui suit pour la copie d'une liste à une autre sans garder la référence:

cartTotal = new list<cartShop>(cartList); 

Notez également que cela est encore dans la méthode et sera créé à chaque fois que vous appelez la méthode.

Mise à jour: Ceci est une application console très simple qui fait ce que vous avez besoin:

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

Cela ne fonctionne toujours pas, carTotal commence toujours à partir de 0 et ne stocke pas l'ancienne valeur. cartList et carTotal sont des variables globales – Allegra

+0

Si cartList est global, à quoi sert cartTotal? Il suffit de retirer 'cartTotal = cartList;' – Mahdi

+0

cartTotal est pour copier une liste de cartList car elle est toujours nouvelle à chaque fois. J'ai été retiré 'cartTotal = cartList;' – Allegra