尝试减少数据库中库存的已售数量

时间:2018-06-20 14:32:01

标签: c# sql data-binding datatable datagrid

我在数据库中有一个批处理表,该表有名为Quantity,Sold_qty和Left_qty的列。假设我在表中有此数据。

 Quantity||Sold_qty||Left_qty
  20     ||    15   ||  5

然后我想做的是,当我更新它们时,假设如果我用更少的数量更新了sold_qty,然后已经存储在数据库中,那么它应该更新库存,并应该减少出售数量并增加剩余数量。

-例如,如果我为Sold_qty提供10,则为10 <15,则15-10 = 5,则应减少Sold_qty中的5个项目,并将它们5添加到Left_qty中。因此,它在下面变成这样。

Quantity||Sold_qty||Left_qty
  20     ||    10   ||  10

我有数据存储在Datagrid中。 datagrid中有多行。我已经写了这段代码。任何帮助,将不胜感激。

            int difference = Convert.ToInt32(textBox3.Text)-ordr_qty;
            textBox9.Text = difference.ToString();
            for (int i = 0; i < newDt.Rows.Count; i++)
            {
                SqlCommand command = new SqlCommand("update batch set sold_qty=sold_qty-@soldqty2 where id=@id2", con);
                command.Parameters.AddWithValue("@soldqty2", Convert.ToInt32(newDt.Rows[i]["qty"]));
                command.Parameters.AddWithValue("@id2", Convert.ToInt32(newDt.Rows[i]["batch_num"]));

                rexe = command.ExecuteNonQuery();

                SqlCommand command3 = new SqlCommand("update batch set left_qty=(select sum(quantity+sold_qty) from batch where id=@id3) where id=@id3", con);
                command3.Parameters.AddWithValue("@id3", Convert.ToInt32(newDt.Rows[i]["batch_num"]));

                command3.ExecuteNonQuery();

            }

1 个答案:

答案 0 :(得分:1)

假设在DB列名称为Quantity,并且在DataGrid.Cell(newDt.Rows [i])中,您为Sold_Qty设置了新值:

for (int i = 0; i < newDt.Rows.Count; i++)
{
    var soldQty = Convert.ToInt32(newDt.Rows[i]["qty"]);
    var batchId = Convert.ToInt32(newDt.Rows[i]["batch_num"]);

    SqlCommand command = new SqlCommand("update batch set sold_qty=@soldqty2, left_qty = Quantiy - @soldqty2 where id=@id2", con);
    command.Parameters.AddWithValue("@soldqty2", soldQty);
    command.Parameters.AddWithValue("@id2", batchId );

    rexe = command.ExecuteNonQuery();
}