2012-11-05 121 views
1

該代碼可以使用第一行只有 和。我想這個代碼與行的其餘工作:插入多條記錄從DataGridView

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

爲什麼你在做'X ++'兩次循環? – Habib

回答

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++; 
        } 
       } 
      } 
+0

這一點兒也不Worck –

+0

有你的異常詳細喝罵 –

+0

感謝對您的重播 –

0

我不認爲你已經寫正確的代碼。 在foreach循環您逐一從GridView中獲取行,一個,然後再運行一個內部循環,與GridView控件的次數,並在這個內循環,直到這個循環dicontinued,您使用的是同一「行」,這你已經提取了foreach循環。 我不確定,如果我得到這個錯誤,但理想情況下這是不好的。

+0

1的foreach(的DataGridViewRow行orderdetailsDataGridView.Rows) 2. { 3.如果(!row.IsNewRow) 4. { 5. cmd.Parameters.Add( 「@ ORDER_ID」,SqlDbType .Int).Value = row.Cells [0] .Value; 6. cmd.Parameters.Add( 「@ PROD_ID」,SqlDbType.Int)。價值= row.Cells [1]。價值; 7. cmd.Parameters.Add(「@ qun」,SqlDbType.Int).Value = row.Cells [2] .Value; 8. cmd.Parameters.Add( 「@價格」,SqlDbType.Decimal)。價值= row.Cells [3]。價值; 9. cmd.ExecuteNonQuery(); 10. cmd.Parameters.Clear(); –