此代码仅适用于第一行 和。我希望此代码与其余行一起使用:
private void Save_Click(object sender, EventArgs e)
{
textBox1.Text =orderdetailsDataGridView.Rows.Count.ToString();
try
{
using (SqlCommand cmd = new SqlCommand())
{
con.Open();
cmd.Connection = con;
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "OD1";
foreach (DataGridViewRow row in orderdetailsDataGridView.Rows)
{
if (!row.IsNewRow)
{
for (int x = 0; x < orderdetailsDataGridView.Rows.Count; x++)
{
cmd.Parameters.Add("@order_id", SqlDbType.Int).Value = row.Cells[0].Value;
cmd.Parameters.Add("@prod_id", SqlDbType.Int).Value = row.Cells[1].Value;
cmd.Parameters.Add("@qun", SqlDbType.Int).Value = row.Cells[2].Value;
cmd.Parameters.Add("@price", SqlDbType.Decimal).Value = row.Cells[3].Value;
cmd.ExecuteNonQuery();
x++;
}
}
}
}
}
catch (Exception er)
{
MessageBox.Show(er.ToString());
}
答案 0 :(得分:0)
我建议您modify nested structure
foreach (DataGridViewRow row in orderdetailsDataGridView.Rows)
{
if (!row.IsNewRow)
{
for (int x = 0; x < orderdetailsDataGridView.Rows.Count; x++)
{
using (SqlCommand cmd = new SqlCommand())
{
con.Open();
cmd.Connection = con;
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "OD1";
cmd.Parameters.Add("@order_id", SqlDbType.Int).Value = row.Cells[0].Value;
cmd.Parameters.Add("@prod_id", SqlDbType.Int).Value = row.Cells[1].Value;
cmd.Parameters.Add("@qun", SqlDbType.Int).Value = row.Cells[2].Value;
cmd.Parameters.Add("@price", SqlDbType.Decimal).Value = row.Cells[3].Value;
cmd.ExecuteNonQuery();
}
x++;
}
}
}
答案 1 :(得分:0)
我认为你没有写过正确的代码。 在foreach循环中,你从GridView中逐个获取行,然后再次运行一个内部循环,使用gridview的计数,并在此内部循环中,直到这个循环被连续,你使用的是相同的“行”,你在foreach循环中提取。 我不确定,如果我弄错了,但理想情况下这不行。