簡體   English   中英

如何通過單擊按鈕增加datagridview中的項目數?

[英]How to increment number of items in datagridview with button click?

單擊食物按鈕時,我必須向datagridview添加新食物。 從數據庫中的FoodGroup表生成的Food選項卡。 當第二次或第三次單擊按鈕時,我想增加計數...

public void loadFoods()
    {
        var q = context.FoodGroups.ToList();
        foreach (var f in q)
        {
            FlowLayoutPanel panel = new FlowLayoutPanel();
            var foods = context.Foods.Where(fd => fd.GroupID == f.GroupID).ToList();
            foreach (var food in foods)
            {
                Button btn = new Button();
                btn.Width = 100;
                btn.Text = food.FoodName.ToString();
                btn.Click += new EventHandler(this.addFood);
                panel.Controls.Add(btn);
            }
            TabPage tab = new TabPage();
            tab.Text = f.GroupName.ToString();
            panel.Dock = DockStyle.Fill;
            tab.Controls.Add(panel);
            tcMain.TabPages.Add(tab);
        }
    }

我為按鈕單擊添加了一種方法,但它為每次新單擊添加了新行:

private void addFood(object sender, EventArgs e)
    {
        Button b = (Button) sender;
        var fo = context.Foods.Where(ff => ff.FoodName == b.Text).FirstOrDefault();
        dgvFoodList.Rows.Add(fo.FoodID, fo.FoodName);
    }

在此處輸入圖片說明

代碼中的問題是,您每次單擊按鈕都會添加食物,同時應檢查所訂購食物中是否存在該食物,然后增加計數。

為此,您可以選擇為FoodOrder創建一個模型,包括FoodCount 然后通過單擊按鈕,檢查BindingList<FoodOrder>是否存在食物,然后增加計數,否則添加新的FoodOrder

該示例是獨立於db編寫的:

public class Food
{
    public string Name { get; set; }
}
public class FoodOrder
{
    public string Name { get; set; }
    public int Count { get; set; }
}
List<Food> foodList; //List of all foods
BindingList<FoodOrder> foodOrders; //List of orders which is shown in data grid veiw

private void Form1_Load(object sender, EventArgs e)
{
    //Load foods, here I created a dummy list of foods
    foodList = Enumerable.Range(1, 3).Select(x => new Food { Name = $"Food {x}" }).ToList();

    //Initialize food orders
    foodOrders = new BindingList<FoodOrder>();

    //Add button for each food
    foodList.ForEach(f =>
    {
        var b = new Button() { Text = f.Name };
        b.Click += (s, ea) =>
        {
            var order = foodOrders.Where(o => o.Name == f.Name).FirstOrDefault();
            //If food already ordered, increase the count, otherwise add to orders
            if (order != null)
                order.Count++;
            else
                foodOrders.Add(new FoodOrder { Name = f.Name, Count = 1 });
            //Refresh data grid veiw
            foodOrders.ResetBindings();
        };
        flowLayoutPanel1.Controls.Add(b);
    });
    //Show orders in data grid view
    dataGridView1.DataSource = foodOrders;
}

暫無
暫無

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

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