1

此代码仅适用于第一行和 . 我希望此代码与其余行一起使用:

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());
}
4

2 回答 2

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++;
                    }
                }
            }
于 2012-11-05T10:38:45.553 回答
0

我认为您没有编写正确的代码。在 foreach 循环中,您从 GridView 中一一获取行,然后再次运行内部循环,使用 gridview 的计数,在此内部循环中,直到此循环停止为止,您正在使用与您相同的“行”已在 foreach 循环中提取。我不确定,如果我弄错了,但理想情况下这是不行的。

于 2012-11-05T10:46:07.760 回答