从DataGridView插入多个记录

时间:2012-11-05 10:15:09

标签: c# gridview

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

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

2 个答案:

答案 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循环中提取。 我不确定,如果我弄错了,但理想情况下这不行。