![](/img/trans.png)
[英]How to create Invoice Number in Text box and auto increment it on button click?
[英]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
創建一個模型,包括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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.