Selection multiple dans un datagridview

yasmine.bennadir Messages postés 14 Date d'inscription mercredi 31 juillet 2013 Statut Membre Dernière intervention 3 octobre 2013 - 31 juil. 2013 à 12:25
Whismeril Messages postés 19030 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 27 avril 2024 - 31 juil. 2013 à 21:52
Bonjour,

je réalise une application (windows form) j'ai un datagridview et je veux sélectionné plusieurs lignes et récupérer leurs positions j'ai beaucoup cherché mais j'ai pas trouvé de solutions merci de m'aider

8 réponses

Whismeril Messages postés 19030 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 27 avril 2024 656
31 juil. 2013 à 18:05
Bonjour,
dans les propriétés du datagrigridwiev, il y en a une qui s'appelle MultiSelect, tu la passe à True et l'opérateur pour sélectionner plusieurs cellules et par extension plusieurs lignes.

Une fois fait, la propriété SelectedRows, retourne la collection des lignes sélectionnées.

Avec un foreach, par exemple tu peux les énumérer et faire une liste des numéro de lignes
            List<int> numerosDeLigne = new List<int>();
            foreach (DataGridViewRow ligne in dataGridView1.SelectedRows)
                numerosDeLigne.Add(ligne.Index);
0
yasmine.bennadir Messages postés 14 Date d'inscription mercredi 31 juillet 2013 Statut Membre Dernière intervention 3 octobre 2013
31 juil. 2013 à 18:26
Merci Whismeril pour votre réponse j'ai testé votre code mais quand je l'ai exécuté j'ai sélectionné quelques éléments dans le datagridview mais il n'entre pas dans le foreach
0
Whismeril Messages postés 19030 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 27 avril 2024 656
31 juil. 2013 à 18:54
Il faut faire en sorte qu'à un moment ce code soit exécuté.

Le plus simple (pas le plus ergonomique, mais tu me sembles débutant) est de mettre un bouton sur ton formulaire et de placer ce code dans l'évènement Click du dit bouton.
Un double click sur le bouton devrait te générer tout seul la possibilité de coder cet événement et placer ton curseur la ou il faut.

Si tu veux que cette liste soit mise à jour automatiquement à chaque changement de sélection, alors il te faut te servir de l'événement SelectionChanged du datagridview.
Pour ce faire, le plus simple, dans la fenêtre [design] de ton formulaire, sectionne le datagridview, tu devrais avoir une liste avec toutes les propriétés (par défaut elle est en bas à droite de l'environnement Visual Studio). Il y a un petit éclair.
Clique dessus, ça affiche la liste des événements, cherche le bon et double click dans la zone de texte à droite.

Si tu débutes (comme je le présent), il faut que tu comprennes les notions d'objet et de programmation événementielle.

Je te conseille les tuto du site du zéro , ils sont très bien fait.
0
yasmine.bennadir Messages postés 14 Date d'inscription mercredi 31 juillet 2013 Statut Membre Dernière intervention 3 octobre 2013
31 juil. 2013 à 19:01
oui je suis débutante Merci beaucoup pour les conseils
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
yasmine.bennadir Messages postés 14 Date d'inscription mercredi 31 juillet 2013 Statut Membre Dernière intervention 3 octobre 2013
31 juil. 2013 à 19:51
grâce à vous j ai pu récupérer les ids des lignes sélectionnées mais j ai un petit souci c'est que quand je sélectionne les lignes toujours le dernier sélectionné n'est pas pris en compte voila mon code si vous arrivez à voir la source de mon probléme

 public void insert(){

                List<int> rows_with_checked_column = new List<int>();
                foreach (DataGridViewRow dr in dataGridView1.Rows)
                {
                   
                    bool s = Convert.ToBoolean(dr.Cells[0].Value);

                    if(s)
                    {
                        id_row = (int)dataGridView1.Rows[dr.Index].Cells["id"].Value;

                        rows_with_checked_column.Add(id_row);
                    }
                }
                        foreach (int r in rows_with_checked_column)
                        {
                            MessageBox.Show(r.ToString());
                        }     
}
               
0
Whismeril Messages postés 19030 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 27 avril 2024 656
31 juil. 2013 à 20:30
tu te compliques la vie

 id_row = (int)dataGridView1.Rows[dr.Index].Cells["id"].Value;


cette ligne peut être simplifiée, tu te sers de dr qui est un ligne, pour extraire son index et lire la ligne du dit index, donc elle même.
Ceci devrait faire pareil, je n'ai pas testé.
 id_row = (int)dr.Cells["id"].Value;



Si la dernière ligne sélectionnée n'est pas prise en compte c'est probablement que ce code n'est pas placé au mieux.

Depuis quelle méthode appelles tu insert()?
0
yasmine.bennadir Messages postés 14 Date d'inscription mercredi 31 juillet 2013 Statut Membre Dernière intervention 3 octobre 2013
31 juil. 2013 à 20:33
depuis un bouton (suivant)
 private void suivant_Click(object sender, EventArgs e)
        {
            insert();
            nv_QCM_step3 step3 = new nv_QCM_step3(nom_admin);
            step3.Show();
            this.Hide();
        }
0
Whismeril Messages postés 19030 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 27 avril 2024 656
31 juil. 2013 à 20:55
Suivant est un bouton?
0
Whismeril Messages postés 19030 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 27 avril 2024 656
Modifié par Whismeril le 31/07/2013 à 20:57
Si oui est ce que la valeur de la cellule 0 de la ligne non prise en compte vaut quelle chose qui sera converti en True?
0
yasmine.bennadir Messages postés 14 Date d'inscription mercredi 31 juillet 2013 Statut Membre Dernière intervention 3 octobre 2013
31 juil. 2013 à 20:59
oui
0
yasmine.bennadir Messages postés 14 Date d'inscription mercredi 31 juillet 2013 Statut Membre Dernière intervention 3 octobre 2013
31 juil. 2013 à 21:00
non normallement elle foit avoir comme valeur true
0
Whismeril Messages postés 19030 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 27 avril 2024 656
31 juil. 2013 à 21:52
ben là je ne sais pas.

As tu mis un point d'arrêt dans ton premier foreach pour voir comment ça se comporte?
0
Rejoignez-nous