循环遍历DataRow并更新库存水平

本文关键字:水平 更新 遍历 DataRow 循环 | 更新日期: 2023-09-27 18:16:17

在我的应用程序中,用户使用DataGridView创建报价。用户通过另一个表单将数据插入DataGridView,然后将其插入到新创建的惟一表中。当用户想要给客户开发票时,他们打开一个表单,显示他们刚刚创建的表的DataGridView。点击一个按钮,我想生成发票的PDF文件(我已经知道怎么做了,所以不要回答这个问题),并更新表"stockTBL"中的库存水平

我的代码到目前为止有点工作,它循环遍历所有行,但不减去我实际试图发票的金额(在本例中,2个项目,数量都是1),它从每个项目减去9。

下面是我的代码:
   private void updateStock()
        {
            for (int i = 0; i < dataGridView1.Rows.Count; i++)
            {
                for (int k = 0; k < dataGridView1.Columns.Count; k++)
                {

                    {
                        string constring = @"Data Source=|DataDirectory|'LWADataBase.sdf";
                        string Query = "UPDATE stockTBL SET Quantity = Quantity - @quantity where [Item Name] = @name";
                        using (SqlCeConnection conDataBase = new SqlCeConnection(constring))
                        using (SqlCeCommand cmd = new SqlCeCommand(Query, conDataBase))
                        {
                            try
                            {
                                conDataBase.Open();
                                cmd.Parameters.Add(new SqlCeParameter("@name", Convert.ToString(dataGridView1.Rows[i].Cells[0].Value)));
                                cmd.Parameters.Add(new SqlCeParameter("@quantity", Convert.ToString(dataGridView1.Rows[i].Cells[4].Value)));
                              int rowsUpdated = cmd.ExecuteNonQuery();
                                conDataBase.Close();
                            }
                            catch (Exception ex)
                            {
                                MessageBox.Show(ex.Message);
                            }
                        }
                    }
                }
            }
        }  

我使用c# 3.5 2010和SqlCe

循环遍历DataRow并更新库存水平

我猜你有一个9列的gridview,这样你的两行看起来大概是这样的:

data0 | data1 | data2 | data3 | 1 | data5 | data6 | data7 | data8

data0.1 | data1.1 | data2.1 | data3.1 | 1 | data5.1 | data6.1 | data7.1 | data8.1


首先,循环遍历行,为每一行执行任务。然后循环遍历每一列。对于每次迭代,您都在执行:

string Query = "UPDATE stockTBL SET Quantity = Quantity - @quantity where [Item Name] = @name";

请注意,每次减少的数量保持不变(当前行在单元格4中的值)

cmd.Parameters.Add(new SqlCeParameter("@quantity", Convert.ToString(dataGridView1.Rows[i].Cells[4].Value)));

要解决这个问题,请尝试删除循环的第二部分,以便它只对每个项执行一次缩减。

for (int k = 0; k < dataGridView1.Columns.Count; k++)
最终代码:

private void updateStock()
    {
        for (int i = 0; i < dataGridView1.Rows.Count; i++)
        {
            string constring = @"Data Source=|DataDirectory|'LWADataBase.sdf";
            string Query = "UPDATE stockTBL SET Quantity = Quantity - @quantity where [Item Name] = @name";
            using (SqlCeConnection conDataBase = new SqlCeConnection(constring))
            using (SqlCeCommand cmd = new SqlCeCommand(Query, conDataBase))
            {
                try
                {
                    conDataBase.Open();
                    cmd.Parameters.Add(new SqlCeParameter("@name", Convert.ToString(dataGridView1.Rows[i].Cells[0].Value)));
                    cmd.Parameters.Add(new SqlCeParameter("@quantity", Convert.ToString(dataGridView1.Rows[i].Cells[4].Value)));
                    int rowsUpdated = cmd.ExecuteNonQuery();
                    conDataBase.Close();
                 }
                 catch (Exception ex)
                 {
                     MessageBox.Show(ex.Message);
                 }
              }
          }
      }