c# - 检查库存是否有足够的库存

标签 c# mysql datagridview

有谁可以帮助我吗?我已经处理这个问题几个月了,但似乎找不到解决方案。

正如标题所说,当我在 POS 中点击某顿饭时,我需要检查每顿饭是否有足够的食材。

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

enter image description here

enter image description here enter image description here

如您所见,每份炸鸡都包含来 self 库存的以下成分。 假设某种成分没有足够的库存,则会出现一个消息框,提示库存中没有剩余库存,否则它将添加到数据 GridView 中。当我点击 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;

    }

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

最佳答案

btn.Click += delegate 中,您不应在 tblmenu 上查询,而应从 Ingredients 表中进行选择并使用 where在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

<小时/>

配料菜单中的MenuName是多余的。你应该删除它。因为食材是库存和菜单的交集。您不想存储每种成分的菜单名称

<小时/>

您不应该在此处使用 btn.Name => cmd.Parameters.AddWithValue("@id", btn.Name); 使用 改为 btn.Tag

<小时/>

单位如何相关。 成分单位和库存单位之间可能存在差异。

关于c# - 检查库存是否有足够的库存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39407381/

相关文章:

mysql - VB.NET MYSQL Datagridview 为空?

c# - 对 SSPI 的调用失败,请参阅内部异常 - 无法联系本地安全机构

python - 使用 Python 3.6.5 安装 MySQLdb 的问题 : Can't open 'mysql.h' - and Can't open : 'config-win.h' : No such file or directory

c# - Windows 窗体中 GridView 内的 Treeview

php - 我可以通过基于文本框中的值与表中列中的值之间的匹配的表单向 MySQL 表添加值吗?

mysql - 查询中的子字符串有多昂贵?我应该在表中取值吗?

.net - 绑定(bind) DataGridView 的自定义排序

c# - 如何使用 C# 将交易数据记录到 GA 电子商务

c# - 创建自动打开的文档

c# - 替换字符或序列列表中未包含的所有字符