Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 自动从库存数量中扣除已售出数量,并以C显示在datagrid中#_C#_Mysql_Datagridview - Fatal编程技术网

C# 自动从库存数量中扣除已售出数量,并以C显示在datagrid中#

C# 自动从库存数量中扣除已售出数量,并以C显示在datagrid中#,c#,mysql,datagridview,C#,Mysql,Datagridview,我一直在尝试,但还没有找到解决办法。我正在尝试实现一个POS。因此我有两个数据库表,一个是tblproducts,它在超市中存储产品,并具有以下字段:productId、ProductName、ProductCategory、Quantity、MinimumQuantity、UnitPrice、Manufacturer。第二个表是tblsales,它存储已售出的产品,并具有以下INF字段:ProductId、ProductName、Qty、Unitprice、amount、QuantityRem

我一直在尝试,但还没有找到解决办法。我正在尝试实现一个POS。因此我有两个数据库表,一个是tblproducts,它在超市中存储产品,并具有以下字段:productId、ProductName、ProductCategory、Quantity、MinimumQuantity、UnitPrice、Manufacturer。第二个表是tblsales,它存储已售出的产品,并具有以下INF字段:ProductId、ProductName、Qty、Unitprice、amount、QuantityRemain。有关TBL销售的信息显示在datagridview中

现在我遇到了一个问题,我希望系统自动从TBL产品的总数量中扣除客户在TBL销售中购买的数量,并显示在数据网格中。并检查是否未达到最低数量。。
任何Mysql都会向某人寻求帮助。

如果您不需要特定的仓库数量,我会让TBL产品保持实际的可供销售数量

TBL销售中的数量是实际销售的销售数量

顺便问一下,在tblSales中是否没有销售id来对行进行分组

如何处理这个问题:

当您希望插入产品的新销售时,您可以创建一个交易,并从TBL产品中扣除销售数量,然后将新销售插入同一交易中的TBL销售中

这样,TBL产品将始终反映卡滞的当前数量

您可以使用这样的隐式事务作用域来包装SqlConnection

string connectionString = "";
int productId = 0;
int soldQuantity = 1;
using (TransactionScope scope = new TransactionScope())
{
    using (var sqlCon = new SqlConnection(connectionString))
    {
        var insertSaleCmd = new SqlCommand("INSERT INTO tblsales(Pid,Description,Qty,UnitPrice‌​) VALUES(@ProductId, @Description, @SoldQuantity, @UnitPrice)", sqlCon);
        insertSaleCmd.Parameters.AddWithValue("@ProductId", productId);
        insertSaleCmd.Parameters.AddWithValue("@SoldQuantity", soldQuantity);
        insertSaleCmd.Parameters.AddWithValue("@Description", "ENTER PRODUCT DESCRIPTION");
        insertSaleCmd.Parameters.AddWithValue("@UnitPrice", 1234.00);
        insertSaleCmd.ExecuteNonQuery();

        var updateProductCmd = new SqlCommand("UPDATE tblproducts Set Quantity=Quantity-@SoldQuantity WHERE productId=@ProductId", sqlCon);
        updateProductCmd.Parameters.AddWithValue("@ProductId", productId);
        updateProductCmd.Parameters.AddWithValue("@SoldQuantity", soldQuantity);
        updateProductCmd.ExecuteNonQuery();

    }
    scope.Complete();
}

这只是一个简单的解决方案,但有很多方法可以实现。

您需要共享为此编写的代码,并告诉我们其中哪些部分没有按预期工作。您尝试了哪些方法?什么不起作用?听起来像是在问如何从一个数字中减去另一个数字并将其保存到数据库中。这似乎是你应该能够尝试的。还要注意,您的表结构似乎在多个位置存储相同的数据,这可能会导致您的混淆。当你有多个真实来源时,你就没有真实来源。在将售出商品添加到数据网格的按钮中,我编写了一个查询:“插入tblsales(Pid、描述、数量、单价、金额、数量)值(“+txtpId.text+”、“+txtname.text+”、“+txtQty.text+”、“+TXTNITRICE.text+”、“+TXTNITRICE.text+”、“+TXTMATAMOUNT.text+”、(”更新tblsales Set QUOTITYINHAND=数量,其中productId=@productId)"但是它在DataGridView中的quantityInStock中显示0我现在如何创建该trabsaction..这就是我现在的位置最简单的方法是使用TransactionScope这里有一个示例链接:我用一个使用TransactionScope的较短示例更新了答案你介意和我聊天吗?因为我无法理解无法聊天,但我尝试添加上面的代码,希望能有所帮助,如果您需要在girdview中查看实际的手头数量,则需要按productId加入表格,并使用TBLPProducts.quantity作为手头数量