私の問題は次のとおりですListBoxe
。1 つ目は注文可能な商品を保管し、2 つ目は顧客のカートです。したがって、製品には Quantity プロパティがNumericUpDown
あり、顧客が注文した製品の数を変更できる があります。
private void button2_Click(object sender, EventArgs e) //puts selectedproduct to the cart
{
if (listBox1.SelectedItem == null || (int)numericUpDown1.Value == 0 ||
(listBox1.SelectedItem as Product).Quantity < (int)numericUpDown1.Value) return;
foreach (Product item in listBox2.Items)
{
if (item.ID == (listBox1.SelectedItem as Product).ID)
{
return;
}
}
listBox2.Items.Add(new Product { Name = (listBox1.SelectedItem as Product).Name,
Price = (listBox1.SelectedItem as Product).Price,
Quantity = (int)numericUpDown1.Value});
(listBox1.SelectedItem as Product).Quantity -= (int)numericUpDown1.Value;
}
これはうまく機能しますが、新しいアイテムが Products テーブルに追加されます。私がやりたいことは、製品テーブルに新しいアイテムを追加するのではなく、選択した数量で選択した製品を顧客のカートに追加し、numericupdown1.value で注文した製品の数量を減らすことです。私はEF Code First Databaseを使用しています。次のようになります。
public class Order
{
public int ID { get; set; }
public bool Status { get; set; }
public virtual Account account { get; set; }
public virtual List<Product> products { get; set; }
}
public class Product
{
public int ID { get; set; }
public string Name { get; set; }
public long Price { get; set; }
public int Quantity { get; set; }
public virtual List<Order> orders { get; set; }
}
そして、保存方法は次のとおりです。
private void button1_Click(object sender, EventArgs e)
{
List<Product> p = new List<Product>();
foreach (Product item in listBox2.Items)
{
p.Add(item);
}
Variables.Db.orders.Add(new Order { account = Variables.Currentuser, products = p });
Variables.Db.SaveChanges(); //Variables.Db is my CodeFirst Database
}
たとえば、次のような多くの方法を試しました。
int q = (listBox1.SelectedItem as Product).Quantity;
(listBox1.SelectedItem as Product).Quantity = (int)numericUpDown1.Value;
listBox2.Items.Add(listBox1.SelectedItem);
(listBox1.SelectedItem as Product).Quantity = q - (int)numericUpDown1.Value;
しかし、最後の行は listbox2 オブジェクトの数を listbox1s と同じに戻します。