在我的应用程序中,用户使用DataGridView创建引用。用户通过另一个表单将数据插入DataGridView,然后将其插入到新创建的唯一表中。当用户想要为客户开具发票时,他们会打开一个表单,显示他们刚刚创建的表的DataGridView。点击按钮我想生成发票的PDF文件(我已经知道该怎么做了,所以不要回答这个问题)并更新表中的库存水平&#34 ; 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#2010和SqlCe 3.5
答案 0 :(得分:0)
我猜你有一个包含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);
}
}
}
}