C# 循环遍历DataRow并更新库存水平
在我的应用程序中,用户使用DataGridView创建报价。用户通过另一个表单将数据插入DataGridView,然后将其插入新创建的唯一表中。当用户想要向客户开具发票时,他们会打开一个表单,显示他们刚刚创建的表的DataGridView。点击一个按钮,我想生成一个发票的PDF文件,我已经知道怎么做了,所以不要回答这个问题,更新stockTBL表中的库存水平 到目前为止,我的代码还可以工作,它在所有行中循环,但不减去我实际要开具发票的金额。在本例中,2个项目,两个项目的数量都是1,它从每个项目中减去9 这是我的密码:C# 循环遍历DataRow并更新库存水平,c#,datagridview,sql-server-ce,C#,Datagridview,Sql Server Ce,在我的应用程序中,用户使用DataGridView创建报价。用户通过另一个表单将数据插入DataGridView,然后将其插入新创建的唯一表中。当用户想要向客户开具发票时,他们会打开一个表单,显示他们刚刚创建的表的DataGridView。点击一个按钮,我想生成一个发票的PDF文件,我已经知道怎么做了,所以不要回答这个问题,更新stockTBL表中的库存水平 到目前为止,我的代码还可以工作,它在所有行中循环,但不减去我实际要开具发票的金额。在本例中,2个项目,两个项目的数量都是1,它从每个项目中
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);
}
}
}
}
}
}
我使用的是C2010和SqlCe 3.5,我猜您有一个包含9列的gridview,因此您的两行大致如下所示: 数据0 |数据1 |数据2 |数据3 |数据1 |数据5 |数据6 |数据7 |数据8 数据0.1 |数据1.1 |数据2.1 |数据3.1 |数据1 |数据5.1 |数据6.1 |数据7.1 |数据8.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);
}
}
}
}
没问题。很高兴我能帮忙。