检查库存中是否有足够的库存

时间:2016-09-09 08:43:30

标签: c# mysql datagridview

任何可以帮助我的人?我已经处理了好几个月,但我似乎无法找到解决方案。

正如标题所说,当我在POS中点击某一餐时,我需要检查每餐的成分是否足够。

我的数据库中有这些表结构..

enter image description here

enter image description here enter image description here

正如您所看到的,每份炸鸡都包含来自我的库存的以下成分。 假设某个成分没有足够的库存,会出现一个消息框,说明库存中没有库存,否则它将被添加到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;

    }

我真的希望有人可以帮助我,因为这是我完成项目所需要做的唯一事情。

1 个答案:

答案 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

比较结果StockQuantityIngredientQuantity

代码存在一些问题:

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的单位之间可能存在差异。