单击食物按钮时,我必须向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);
}
答案 0 :(得分:0)
代码中的问题是您通过单击按钮添加食物,同时应检查所订购食物中是否存在食物,然后增加计数。
为此,您可以选择为FoodOrder
创建一个模型,包括Food
和Count
。然后通过单击按钮,检查食物是否存在于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;
}