private void UpdateAvailableItemsWhenAdding(ReleaseOrderDetailBM toRemove) { //Cuando se devuelve de la grilla a lo disponible // Luego, hay que constatar si el elemento que se devuelve existe en la lista de disponible. //Si existe, se incrementan las unidades devueltas; caso contrario, directamente se agrega el elemento a la lista bool found = false; List <StockBM> listOfStock = (List <StockBM>)lstStock.DataSource; for (int i = 0; i < listOfStock.Count && !found; ++i) { found = toRemove.stock.id == listOfStock[i].id; if (found) { listOfStock[i].Quantity += listOfStock[i].Quantity + toRemove.Quantity; } } if (!found) { if (listOfStock == null) { listOfStock = new List <StockBM>(); } // Acá se pone picante: como no existe, el máximo de stock es el mimso que lo devuelto toRemove.stock.Quantity = toRemove.Quantity; listOfStock.Add(toRemove.stock); lstStock.DataSource = null; lstStock.DataSource = listOfStock; lstStock.DisplayMember = "Name"; } }
private void UpdateGrid(bool isAdding) { ReleaseOrderDetailBM detailToAdd = null; StockBM stockToAdd = (StockBM)lstStock.SelectedItem; if (isAdding) { bool found = false; //si existe, es necesario que se controle que no se puedan agregar más unidades que las que especifica el stock disponible for (int i = 0; i < lstAdded.Count && !found; ++i) { found = stockToAdd.id == lstAdded[i].stock.id; if (found) { int total = lstAdded[i].Quantity + int.Parse(nbrQuantity.Value.ToString()); if (total < stockToAdd.Quantity) { lstAdded[i].Quantity = total; } else { lstAdded[i].Quantity = stockToAdd.Quantity; //Si se asigna el máximo disponible, entonces ya no debe formar parte de la lista de stock disponible. //Negrada... no hay tiempo: borra el elemento del listbox UpdateAvailableItemsWhenRemoving(stockToAdd); } } } // Si el stock a agregar no existe en la lista de agregados, entonces se incorpora. if (!found) { detailToAdd = new ReleaseOrderDetailBM(); detailToAdd.stock = stockToAdd; detailToAdd.Quantity = int.Parse(nbrQuantity.Value.ToString()); lstAdded.Add(detailToAdd); //Si se agrega lo máximo, entonces se elimia de los disponibles if (stockToAdd.Quantity == detailToAdd.Quantity) { UpdateAvailableItemsWhenRemoving(stockToAdd); } } } else { // La estrategia consiste en ver si existe el elemento que quiero devolver, en la lista de disponibles para incrementar el valor de disponibilidad // o agregar el item directamente si es que no existe. ReleaseOrderDetailBM toRemove = (ReleaseOrderDetailBM)dgRelease.SelectedRows[0].DataBoundItem; bool found = false; // Como la grilla se alimenta de una lista llamada lstAdded, se debe identificar el elemento para eliminarlo de allí. for (int i = 0; i < lstAdded.Count && !found; ++i) { found = toRemove.stock.id == lstAdded[i].stock.id; if (found) { lstAdded.RemoveAt(i); } } UpdateAvailableItemsWhenAdding(toRemove); } dgRelease.DataSource = null; dgRelease.DataSource = lstAdded; }