3

私の問題は次のとおりです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 と同じに戻します。

4

1 に答える 1