public bool UpdPrevision(Prevision pr)
 {
     // Recherche dans la liste
     int rang = previsions.IndexOf(pr);
     if (rang != -1)
     {
         previsions[rang] = pr;
         return true;
     }
     else return false;
 }
 public bool DelPrevision(Prevision pr)
 {
     try
     {
         previsions.Remove(pr);
         return true;
     }
     catch (Exception ex)
     {
         return false;
     }
 }
        // validation après bouton créer ou modifier
        private void btnValider_Click(object sender, EventArgs e)
        {
            // Controles

            if (cboQualif.SelectedIndex == -1)
                MessageBox.Show("Choisir une qualification");
            else if (nudJours.Value == 0)
                MessageBox.Show("Saisir le nombre de jours");
            else // controles OK
            {
                // creer une nouvelle prévision
                Prevision newP = new Prevision();
                newP.LaQualif = (Qualification)cboQualif.SelectedItem;
                newP.NbJours = (short)nudJours.Value;
                newP.CodeProjet = leProjetEnCours.CodeProjet;

                if (Mode == "C") // création
                {
                    // Controle qualif non existe déjà 
                    if (leProjetEnCours.GetPrevisions().Contains(newP))
                        MessageBox.Show("Existe déjà");
                    else
                    {
                        try
                        {
                            // ajout en base
                            int idPrev = DaoProjet.AddPrevision(newP);
                            // si ok
                            if (idPrev != 0)
                            {
                                newP.CodePrev = idPrev;
                                // ajout projet
                                leProjetEnCours.AddPrevision(newP);
                                // rafraichissement du datagrid view
                                this.previsionBindingSource.ResetBindings(false);
                                MessageBox.Show(String.Format("Prévision ajoutée"));
                                // efface le group box
                                gbUnePrevision.Visible = false;
                                // Datagrid view devient peut être visible apres 1er ajout
                                if (!dgvPrevisions.Visible)
                                {
                                    dgvPrevisions.Visible = true;
                                    lblTitre.Text = "Les previsions";
                                }
                            }
                        }
                        catch (DaoExceptionFinAppli defa)
                        {
                            MessageBox.Show(defa.Message);
                            Application.Exit();
                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show(ex.Message);
                        }
                    }
                }
                else // Modification
                {
                    try
                    {
                        newP.CodePrev = newPMS.CodePrev;
                        newP.CodeProjet = newPMS.CodeProjet;
                        // modif en base
                        if (DaoProjet.UpdPrevision(newP))
                        {
                            //modif dans les prévisions projet
                            leProjetEnCours.UpdPrevision(newP);
                            // rafraichissement du datagrid view
                            this.previsionBindingSource.ResetBindings(false);
                            // efface le group box
                            gbUnePrevision.Visible = false;

                        }
                    }
                    catch (DaoExceptionFinAppli defa)
                    {
                        MessageBox.Show(defa.Message);
                        Application.Exit();
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message);
                    }

                }

            }
        }
        // modification ou suppression dans le dategrid view
        private void dgvPrevisions_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            // L'evenement DataGridViewCellEventArgs donne la colonne et la ligne de la cellule cliquée
            bool success = false;
            // Ignore click qui n'est pas sur une cellule bouton  
            if ((e.RowIndex >= 0 && e.ColumnIndex == dgvPrevisions.Columns["btnModifier"].Index)
                ||
                (e.RowIndex >= 0 && e.ColumnIndex == dgvPrevisions.Columns["btnSupprimer"].Index)
                )
            {
                // A partir des objets DataBoundItem
                //======================================

                // creer la prévision à modifier ou supprimer
                newPMS = (dgvPrevisions.Rows[e.RowIndex]).DataBoundItem as Prevision;

                //Modif ou Suppression
                if (e.ColumnIndex == dgvPrevisions.Columns["btnModifier"].Index)
                {
                    Mode = "M";
                    // affectations champs du groupBox
                    nudJours.Value = newPMS.NbJours;
                    cboQualif.SelectedItem = newPMS.LaQualif;
                    // affiche le groupBox pour modification
                    gbUnePrevision.Visible = true;
                }
                else
                {

                    DialogResult dr = MessageBox.Show("Confirmez-vous la suppression", "Confirmation", MessageBoxButtons.YesNo, MessageBoxIcon.Question,
             MessageBoxDefaultButton.Button1);
                    if (dr == DialogResult.Yes)
                    {
                        try
                        {
                            // Supprime en base
                            success = DaoProjet.DelPrevision(newPMS);
                            if (success)
                            {
                                // Supprime dans les prévisions du projet
                                leProjetEnCours.DelPrevision(newPMS);
                                // rafraichissement du datagrid view
                                this.previsionBindingSource.ResetBindings(false);
                                // Peut-être plus aucune prevision apres suppression
                                AffichageDG(previsionBindingSource.Count);
                            }
                        }
                        catch (DaoExceptionFinAppli defa)
                        {
                            MessageBox.Show(defa.Message);
                            Application.Exit();
                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show(ex.Message);
                        }

                    }
                }
            }
        }
 public bool AddPrevision(Prevision pr)
 {
     previsions.Add(pr);
     return true;
 }
        public static int AddPrevision(Prevision pr)
        {
            // création connection
            using (SqlConnection sqlConnect = GetConnection())
            {
                // projet forfait
                using (SqlCommand sqlCde = new SqlCommand())
                {
                    //initialiser la connection de la commande
                    sqlCde.Connection = sqlConnect;
                    sqlCde.CommandType = CommandType.StoredProcedure;
                    string strSql = "AddPrevision";
                    sqlCde.CommandText = strSql;

                    sqlCde.Parameters.Add(new SqlParameter("@idProjet", SqlDbType.Int)).Value = pr.CodeProjet;
                    sqlCde.Parameters.Add(new SqlParameter("@idQualif", SqlDbType.TinyInt)).Value = pr.LaQualif.CodeQualif;
                    sqlCde.Parameters.Add(new SqlParameter("@nbjours", SqlDbType.Int)).Value = pr.NbJours;

                    // ajout du code prevision en sortie 
                    SqlParameter pOut = new SqlParameter("@idPrev", SqlDbType.Int);
                    pOut.Direction = ParameterDirection.Output;
                    sqlCde.Parameters.Add(pOut);

                    // exécution de la requete
                    //========================
                    try
                    {
                        int n = sqlCde.ExecuteNonQuery();
                        if (n != 1)
                            throw new DaoExceptionAfficheMessage("L'opération n'a pas été réalisée");
                        return (int)pOut.Value;
                    }
                    catch (SqlException se)
                    {
                        throw new DaoExceptionAfficheMessage("L'opération n'a pas été réalisée: \n" + se.Message, se);
                    }
                }
            }
        }
        public static bool UpdPrevision(Prevision pr)
        {
            // création connection
            using (SqlConnection sqlConnect = GetConnection())
            {
                // projet forfait
                using (SqlCommand sqlCde = new SqlCommand())
                {
                    //initialiser la connection de la commande
                    sqlCde.Connection = sqlConnect;
                    string strSql = "UpdPrevision";
                    sqlCde.CommandText = strSql;
                    sqlCde.CommandType = CommandType.StoredProcedure;

                    // affectation du parametre idprojet à la procédure stockée
                    sqlCde.Parameters.Clear();
                    sqlCde.Parameters.Add(new SqlParameter("@idPrevision", SqlDbType.Int)).Value = pr.CodePrev;
                    sqlCde.Parameters.Add(new SqlParameter("@idQualif", SqlDbType.TinyInt)).Value = pr.LaQualif.CodeQualif;
                    sqlCde.Parameters.Add(new SqlParameter("@nbjours", SqlDbType.Int)).Value = pr.NbJours;

                    try
                    {

                        int n = sqlCde.ExecuteNonQuery();
                        if (n != 1)
                            throw new DaoExceptionAfficheMessage("L'opération n'a pas été réalisée");
                        return true;
                    }
                    catch (SqlException se)
                    {
                        throw new DaoExceptionAfficheMessage("L'opération de suppression n'a pas été réalisée: \n" + se.Message, se);
                    }
                }
            }
        }
        // Les prévisions
        //================

        public static List<Prevision> GetPrevisionByProjet(int idProjet)
        {
            List<Prevision> Previsions = new List<Prevision>();
            // création connection
            using (SqlConnection sqlConnect = GetConnection())
            {

                // projet forfait
                using (SqlCommand sqlCde = new SqlCommand())
                {
                    //initialiser la connection de la commande
                    sqlCde.Connection = sqlConnect;
                    // chargement des qualifications
                    String strSql = "GetPrevisionByProjet";
                    sqlCde.CommandText = strSql;
                    sqlCde.CommandType = CommandType.StoredProcedure;
                    sqlCde.Parameters.Add(new SqlParameter("@idProjet", SqlDbType.Int)).Value = idProjet;

                    // Exécution de la commande
                    try
                    {
                        SqlDataReader sqlRdr = sqlCde.ExecuteReader();
                        while (sqlRdr.Read())
                        {
                            // Création objet
                            Prevision oPrev = new Prevision()
                            {
                                CodePrev = sqlRdr.GetInt32(0),
                                CodeProjet = sqlRdr.GetInt32(1),
                                LaQualif = new Qualification() { CodeQualif = Convert.ToSByte(sqlRdr[2]) },
                                NbJours = sqlRdr.GetInt16(3)
                            };
                            // ajout liste
                            Previsions.Add(oPrev);
                        }
                        sqlRdr.Close();

                        return Previsions;
                    }
                    catch (SqlException se)
                    {
                        throw new DaoExceptionFinAppli("Lecture des previsions impossible, l'application va se fermer: \n" + se.Message, se);
                    }
                }
            }
        }