Presently, you call dataGridView2.Refresh(); in the for loop. This means that after deleting the first of the selected rows, the datagrid gets refreshed, and the selection is lost, consequently the other selected rows won't be deleted.
Just place that at a later position, something like
private void Delete_Click(object sender, EventArgs e)
{
objConn1.Open();
for (int i = 0; i < dataGridView2.SelectedRows.Count; i++)
{
string sql = "Delete from [SAPProduction].[ProductionData] Where id = '" + dataGridView2.CurrentRow.Cells["id"].Value + "'";
SqlCommand cmd = new SqlCommand(sql, objConn1);
cmd.ExecuteNonQuery();
}
objConn1.Close();
MessageBox.Show("Record Deleted successfully...");
dataGridView2.Refresh();
}
Apart from that change, you should also use a parameterized query.