如何通过单击按钮增加datagridview中的项目数?

时间:2018-12-09 20:15:08

标签: c# winforms

单击食物按钮时,我必须向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);
    }

enter image description here

1 个答案:

答案 0 :(得分:0)

代码中的问题是您通过单击按钮添加食物,同时应检查所订购食物中是否存在食物,然后增加计数。

为此,您可以选择为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;
}