任何可以帮助我的人?我已经处理了好几个月,但我似乎无法找到解决方案。
正如标题所说,当我在POS中点击某一餐时,我需要检查每餐的成分是否足够。
我的数据库中有这些表结构..
正如您所看到的,每份炸鸡都包含来自我的库存的以下成分。 假设某个成分没有足够的库存,会出现一个消息框,说明库存中没有库存,否则它将被添加到datagridview中。一旦我点击我的POS中的炸鸡,就会发生这种情况。
这是我的代码:
cmd = new MySqlCommand("SELECT * FROM tblmenu", dbConn);
MySqlDataReader rdr = cmd.ExecuteReader();
while (rdr.Read())
{
Button btn = new Button();
btn.Name = rdr["menuID"].ToString();
btn.BackgroundImage = Image.FromStream(ms);
btn.BackgroundImageLayout = ImageLayout.Stretch;
btn.Width = 120;
btn.Height = 100;
btn.Click += delegate
{
MySqlConnection cnn2 = new MySqlConnection(sqlConn.connString);
cnn2.Open();
cmd = new MySqlCommand("SELECT menuID, menuName, menuPrice, menuCategory FROM tblmenu WHERE menuID = @id", cnn2);
cmd.Parameters.AddWithValue("@id", btn.Name);
MySqlDataReader rdr2 = cmd.ExecuteReader();
if (rdr2.Read() == true)
{
dataGridView1.Rows.Add(rdr2.GetInt32("menuID"), rdr2.GetString("menuName").ToUpper(), 1, rdr2.GetDouble("menuPrice"), rdr2.GetDouble("menuPrice"));
}
};
然后在datagridview中调整数量的函数
void quantity_change(object sender, EventArgs e)
{
var row = dataGridView1.CurrentRow;
if (row == null || row.Index < 0)
return;
var unit = (sender == btnAdd) ? 1 : -1;
var quantity = Convert.ToInt32(row.Cells["Quantity"].Value) + unit;
row.Cells["Quantity"].Value = quantity;
var rate = Convert.ToDouble(row.Cells["Price"].Value);
row.Cells["TotalAmount"].Value = quantity * rate;
}
我真的希望有人可以帮助我,因为这是我完成项目所需要做的唯一事情。
答案 0 :(得分:0)
在btn.Click += delegate
您对tblmenu
上的查询,但请从Ingredients
表格中选择并使用MenuID
上的位置。同时加入库存,选择当前库存值。
类似于:(未经过测试,但可能会提示)
SELECT menuID, menuName, menuPrice, menuCategory, tblinventory.Quantity AS StockQuantity, tblingredients.Quantity AS IngredientQuantity
FROM tblingredients
INNER JOIN tblinventory on tblingredients.InvID == tblinventory.ID
WHERE menuID = @id
比较结果StockQuantity
和IngredientQuantity
代码存在一些问题:
dataGridView1.Rows.Add(rdr2.GetInt32("menuID"), rdr2.GetString("menuName").ToUpper(), 1, rdr2.GetDouble("menuPrice"), rdr2.GetDouble("menuPrice"));
为什么要两次添加 menuPrice ?
成分菜单中的MenuName
是多余的。你应该删除它。因为成分是库存和菜单之间的交集。您不想存储每种成分的菜单名称
你不应该使用btn.Name
here =&gt; cmd.Parameters.AddWithValue("@id", btn.Name);
使用btn.Tag
代替。
units
如何相关。 ingredients
的单位与inventory
的单位之间可能存在差异。