簡體   English   中英

我想更新列表框c#winform上的數量

[英]i want to update the quantity on a list box c# winform

如何更新列表上的特定值。例如,當我單擊按鈕時,它將產品添加到列表中

名稱:咖啡|| 數量:1 || 價格:2 $

當我再次點擊同一產品時,數量增加1,我使用了此代碼,但沒有更改數量。

private BindingList<recipt> Lista2 = new BindingList<recipt>();
private void addtolist(object sender, EventArgs e)
{

    Button b = (Button)sender;
    Product p = (Product)b.Tag;
    recipt fat = new recipt ()
    {
        Name= p.Name,
        quantity= 1,
        price = p.Cmimi
    };
    bool found = false;
    if (listBox1.Items.Count > 0)
    {
        foreach (var pr in Lista2)
        {
            if (pr.Name== p.Name)
            {
                pr.quantity= pr.quantity+ 1;
                found = true;
            }
        }
        if (!found)
        {
            fat.tot= fat.quantity* fat.price;
            fat.Nr_bill = Convert.ToInt32(txtNrbill.Text);
            Lista2.Add(fat);

        }
    }
    else
    {
        fat.tot= fat.quantity* fat.price;
        fat.Nr_bill = Convert.ToInt32(txtNrbill.Text);
        Lista2.Add(fat);


    }
    fat.tot= fat.quantity* fat.price;
    fat.Nr_bill = Convert.ToInt32(txtNrbill.Text);
    Lista2.Add(fat);
    pe.Faturs.Add(fat);
    pe.SaveChanges();

    Total = Total + (int)fat.price;
    listBox1.SelectedIndex = listBox1.Items.Count - 1;
}

為了自動更新ListBox中的值,您需要將收據的BindingList設置為ListBox.DataSource並使Receipt類實現INotifyPropertyChanged

public class Receipt : INotifyPropertyChanged
{
    public string Name { get; }
    public int Quantity { get; private set; }
    public decimal Price { get; }
    public string BillNumber { get; private set; }
    public decimal Total => Price * Quantity;
    public string Info => $"{nameof(Name)}: {Name} || {nameof(Quantity)}: {Quantity} || {nameof(Price)}: {Price:C} || {nameof(Total)}: {Total:C}";

    public Receipt(string name, decimal price, string billNumber)
    {
        Name = name;
        Price = price;
        BillNumber = billNumber;
        Quantity = 1;
    }

    public void AddOne()
    {
        Quantity += 1;
        RaisePropertyChanged(nameof(Info));
    }

    public event PropertyChangedEventHandler PropertyChanged;

    protected virtual void RaisePropertyChanged([CallerMemberName] string propertyName = null)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}

然后形式

public class YourForm : Form
{
    private readonly BindingList<Receipt> _Receipts;

    public YourForm()
    {
        _Receipts = new BindingList<Receipt>();

        listBox1.DisplayMember = "Info";
        listBox1.DataSource = _Receipts;        
    }

    private void AddToList(object sender, EventArgs e)
    {
        var button = (Button) sender;
        var product = (Product) button.Tag;
        var receiptInfo = _Receipts.FirstOrDefault(receipt => receipt.Name.Equals(product.Name));
        if (receiptInfo == null)
        {
            receiptInfo = new Receipt(product.Name, product.Cmimi, txtNrbill.Text);
            _Receipts.Add(receiptInfo);
        }
        else
        {
            receiptInfo.AddOne();
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM