我尝试在单击按钮后同时插入datagridview值和文本框,但数据在数据库中重复。
有人能告诉我我的代码中有什么问题吗?
我的代码
private void btnPay_Click(object sender, EventArgs e)
{
decimal pay, balance, total;
total = decimal.Parse(txtNetTotal.Text);
pay = decimal.Parse(txtCash.Text);
balance = pay - total;
txtCash.Text = pay.ToString("0.00");
txtBalance.Text = balance.ToString("0.00");
try
{
foreach (DataGridViewRow row in dgvOrder.Rows)
{
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["conStr"].ConnectionString);
SqlCommand cmd = new SqlCommand("insert into tblOrder (ProductName,Quantity,ProductPrice,TotalPrice,Cash,Balance)" +
"values (@ProductName,@Quantity,@ProductPrice,@TotalPrice,@Cash,@Balance)", con);
cmd.Parameters.AddWithValue("@ProductName", Convert.ToString(row.Cells["colProduct"].Value));
cmd.Parameters.AddWithValue("@Quantity", Convert.ToString(row.Cells["colQuantity"].Value));
cmd.Parameters.AddWithValue("@ProductPrice", Convert.ToString(row.Cells["colPrice"].Value));
cmd.Parameters.AddWithValue("@TotalPrice", txtTotal.Text.Trim());
cmd.Parameters.AddWithValue("@Cash", txtCash.Text.Trim());
cmd.Parameters.AddWithValue("@Balance", txtBalance.Text.Trim());
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}
}
catch(SqlException ex)
{
MessageBox.Show(ex.Message);
}
}
这里是按钮事件的整个代码。
答案 0 :(得分:2)
根据上述评论以及编辑到问题中的图片,您的DataGridView
有两个行。这就是为什么这个循环将两个行插入数据库的原因:
foreach (DataGridViewRow row in dgvOrder.Rows)
看起来第二行是空白行,这解释了为什么第二个数据库条目只有静态值而不是基于行的值。为了防止这种情况,您应该能够添加一个简单的条件:
foreach (DataGridViewRow row in dgvOrder.Rows)
{
if (!row.IsNewRow)
{
// insert into the database
}
}
或者,如果嵌套代码块不雅观:
foreach (DataGridViewRow row in dgvOrder.Rows)
{
if (row.IsNewRow)
continue;
// insert into the database
}