private void buttonAjoutLicencie_Click(object sender, EventArgs e)
        //Affiche le formulaire d'ajout de licencié
        {
            try
            {
                //création et affichage du formulaire (vide dû au constructeur 1, pas d'infos à insérer)
                FormGestionLicenciesAjout ajoutLicencie = new FormGestionLicenciesAjout(textBoxGestionNom.Text, textBoxGestionPrenom.Text);
                ajoutLicencie.SetMetier(_metier);
                ajoutLicencie.ShowDialog();//le nouveau formulaire obtient la priorité (un seul form ouvert à la fois)

                //si l'utilisateur a confirmé l'ajout (bouton Terminer du formulaire), on actualise la grille de résultats
                if (ajoutLicencie.DialogResult == DialogResult.OK)
                {
                    dataGridViewGestionLicencies.Rows.Add();
                    int idx = dataGridViewGestionLicencies.Rows.Count - 1;
                    if (idx > 0)
                    {
                        dataGridViewGestionLicencies.Rows[idx].HeaderCell.Value = String.Format("{0}", dataGridViewGestionLicencies.Rows[idx].Index + 1);
                    }
                    else
                    {
                        dataGridViewGestionLicencies.Rows[idx].HeaderCell.Value = String.Format("{0}", 1);
                    }
                    dataGridViewGestionLicencies[0, idx].Value = ajoutLicencie.GetNewNom();
                    dataGridViewGestionLicencies[1, idx].Value = ajoutLicencie.GetNewPrenom();
                    dataGridViewGestionLicencies[2, idx].Value = ajoutLicencie.GetNewDateNaissance();
                    dataGridViewGestionLicencies[3, idx].Value = ajoutLicencie.GetNewMail();
                    dataGridViewGestionLicencies[4, idx].Value = "EDIT";
                    dataGridViewGestionLicencies[5, idx].Value = "RÉINSC";
                    dataGridViewGestionLicencies[6, idx].Value = "SUPPR";
                }
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }
        private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
        //Gère l'édition, la réinscription et la suppression d'un licencié parmis les résultats de la recherche
        {
            try
            {
                var senderGrid = (DataGridView)sender;
                //on ne regarde que les clicks sur un bouton ici
                if (senderGrid.Columns[e.ColumnIndex] is DataGridViewButtonColumn && e.RowIndex >= 0)
                {
                    //si le user choisit de supprimer un licencié
                    if (senderGrid.Columns[e.ColumnIndex].HeaderText == "Suppression")
                    {
                        //on demande une confirmation car l'opération est irresversible
                        var confirm = DialogResult.No;
                        confirm = MessageBox.Show("Vous allez supprimer le licencié :" + senderGrid[0, e.RowIndex].Value
                                                  + " " + senderGrid[1, e.RowIndex].Value + " (" + senderGrid[2, e.RowIndex].Value
                                                  + ").\nÊtes-vous sûr ?", "Confirmation", MessageBoxButtons.YesNo);
                        if (confirm == DialogResult.Yes)
                        {
                            //on supprime le licencié dans la BDD
                            _metier.SupprimerLicencie(senderGrid[0, e.RowIndex].Value.ToString(),
                                                      senderGrid[1, e.RowIndex].Value.ToString(), senderGrid[3, e.RowIndex].Value.ToString());

                            //on supprime le licencié dans la grille des résultats et on actualise les indexs des lignes
                            dataGridViewGestionLicencies.Rows.RemoveAt(e.RowIndex);
                            for (int i = e.RowIndex; i < dataGridViewGestionLicencies.Rows.Count; i++)
                            {
                                dataGridViewGestionLicencies.Rows[i].HeaderCell.Value =
                                    String.Format("{0}", dataGridViewGestionLicencies.Rows[i].Index + 1);
                            }
                        }
                    }

                    //si le user choisit de réinscrire le licencié (année en cours ou suivante)
                    if (senderGrid.Columns[e.ColumnIndex].HeaderText == "Réinscription")
                    {
                        //initialisation des entités
                        Licencie    lcn   = null;
                        Telephone[] tel   = null;
                        string[]    idsnc = null;

                        //on récupère les informations de la BDD dans les entités ci-dessus (via les refs ci-dessous)
                        _metier.GetLicencie(senderGrid[0, e.RowIndex].Value.ToString(),
                                            senderGrid[1, e.RowIndex].Value.ToString(), senderGrid[3, e.RowIndex].Value.ToString(),
                                            ref lcn, ref tel, ref idsnc);

                        //Création/remplissage/affichage du formulaire de réinscription via le constructeur 2 (infos pré-complétées)
                        FormGestionLicenciesAjout ReinscrireLicencie = new FormGestionLicenciesAjout("réinscription",
                                                                                                     lcn, tel, idsnc, senderGrid[0, e.RowIndex].Value.ToString(),
                                                                                                     senderGrid[1, e.RowIndex].Value.ToString(), senderGrid[3, e.RowIndex].Value.ToString());
                        ReinscrireLicencie.SetMetier(_metier);
                        ReinscrireLicencie.RemplirChamps();
                        ReinscrireLicencie.ShowDialog(); // priorité donc un seul form de ce type à la fois

                        //si le user a confirmé la réinscription (bouton Terminer du formulaire), on actualise la grille de résultats
                        if (ReinscrireLicencie.DialogResult == DialogResult.OK)
                        {
                            senderGrid[0, e.RowIndex].Value = ReinscrireLicencie.GetNewNom();
                            senderGrid[1, e.RowIndex].Value = ReinscrireLicencie.GetNewPrenom();
                            senderGrid[2, e.RowIndex].Value = ReinscrireLicencie.GetNewDateNaissance();
                            senderGrid[3, e.RowIndex].Value = ReinscrireLicencie.GetNewMail();
                        }
                    }

                    //si le user choisit d'éditer les infos du licencié (année en cours uniquement)
                    if (senderGrid.Columns[e.ColumnIndex].HeaderText == "Édition")
                    {
                        //initialisation des entités
                        Licencie    lcn   = null;
                        Telephone[] tel   = null;
                        string[]    idsnc = null;

                        //on récupère les informations de la BDD dans les entités ci-dessus (via les refs ci-dessous)
                        _metier.GetLicencie(senderGrid[0, e.RowIndex].Value.ToString(),
                                            senderGrid[1, e.RowIndex].Value.ToString(), senderGrid[3, e.RowIndex].Value.ToString(),
                                            ref lcn, ref tel, ref idsnc);

                        //Création/remplissage/affichage du formulaire d'édition via le constructeur 2 (infos pré-complétées)
                        FormGestionLicenciesAjout EditerLicencie = new FormGestionLicenciesAjout("édition",
                                                                                                 lcn, tel, idsnc, senderGrid[0, e.RowIndex].Value.ToString(), senderGrid[1, e.RowIndex].Value.ToString(),
                                                                                                 senderGrid[3, e.RowIndex].Value.ToString());
                        EditerLicencie.SetMetier(_metier);
                        EditerLicencie.RemplirChamps();
                        EditerLicencie.ShowDialog(); // priorité donc un seul form de ce type à la fois

                        //si le user a confirmé l'édition (bouton Terminer du formulaire), on actualise la grille de résultats
                        if (EditerLicencie.DialogResult == DialogResult.OK)
                        {
                            senderGrid[0, e.RowIndex].Value = EditerLicencie.GetNewNom();
                            senderGrid[1, e.RowIndex].Value = EditerLicencie.GetNewPrenom();
                            senderGrid[2, e.RowIndex].Value = EditerLicencie.GetNewDateNaissance();
                            senderGrid[3, e.RowIndex].Value = EditerLicencie.GetNewMail();
                        }
                    }
                }
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }