IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Comment sélectionner une ligne d'une ListView par le code [Débutant]


Sujet :

VB.NET

  1. #1
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2017
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2017
    Messages : 138
    Points : 77
    Points
    77
    Par défaut Comment sélectionner une ligne d'une ListView par le code
    Bonjour,
    J'ai créé une LISTVIEW et l'ai remplie avec les données, ça fonctionne parfaitement.
    Je souhaiterais pourvoir sélectionner une des lignes par le code en fonction d'un test, problème le test se déroule bien, pas de message d'erreur mais aucune ligne n'est sélectionnée
    Voilà mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    For X = 0 To MonViewLocataires2.Count - 1
              If MonViewLocataires2(X)("ID") = DataGridViewLocataires("ID_Principal_DGV_Locataires", NumLigneDataGridViewLocataires).Value Then
                        ListView_LocatairePrincipal.Items(X).Selected = True
                        Exit For
              End If
    Next
    Merci par avance du temps consacré à me répondre

  2. #2
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    Bonsoir,

    --> Dans un premier temps, il faut être certain que tu entres dans ta conditionnelle donc il faut être certain que ceci retourne le résultat escompté (un point d'arrêt pour contrôler la valeur ne serait pas du luxe ) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    DataGridViewLocataires("ID_Principal_DGV_Locataires", NumLigneDataGridViewLocataires).Value
    --> Secondo, à quel contôle cela fait-il référence :

    --> Tertio, tu dois vouloir extraire l'ID d'une colonne de ton Listview donc il faudrait savoir si c'est la 1ère colonne, la seconde ou une autre ... , cela à son importance !



    --> Enfin, selon tes éléments la logique voudrait que l'on parcours ton contrôle Listview pour en extraire l'ID et le comparer à l'ID de ton DGV :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
                    For Each it As ListViewItem In ListView_LocatairePrincipal.Items
                        'Si l'ID se situe sur la 1ère colonne de ton Listview
                        If it.Text.trim.tolower = DataGridViewLocataires("ID_Principal_DGV_Locataires", NumLigneDataGridViewLocataires).Value.tostring.trim.tolower Then
                            it.Selected = True
                            Exit for
                        End If
                        'Au cas où l'ID se situe sur la 2ème colonne de ton Listview
                        'If it.Subitems(1).Text.trim.tolower = DataGridViewLocataires("ID_Principal_DGV_Locataires", NumLigneDataGridViewLocataires).Value.tostring.trim.tolower Then
                        '    it.Selected = True
                        '   Exit for
                        'End If
                    Next
    A+

  3. #3
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2017
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2017
    Messages : 138
    Points : 77
    Points
    77
    Par défaut
    Merci pour ta réponse wallace1

    Pour répondre à tes questions :
    1/ oui ça rentre bien dans la conditionnelle (j'avais testé avant de demander de l'aide ici)
    2/ MonViewLocataires2 est un DATAVIEW issu d'un DATASET, c'est à partir des données de MonViewLocataires2 que je remplis la LISTVIEW
    3/ l'ID est bien dans la première colonne et je le récupère très bien en cliquant sur la ligne de la LISTVIEW (it.text)
    4/ J'ai remplacé mon code par le tiens mais j'ai le même résultat la ligne n'est pas sélectionnée ...

    Voilà ce que j'obtiens :
    Nom : InkedCapture d'écran 2017-10-23 20.56.17_LI.jpg
Affichages : 2749
Taille : 37,8 Ko

    Voilà ce que je souhaiterais obtenir :
    Nom : InkedCapture d'écran 2017-10-23 20.56.25_LI.jpg
Affichages : 2655
Taille : 37,1 Ko

  4. #4
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    Donc dans ce cas il serait judicieux de savoir si la boucle retourne les valeurs correctement avant de vouloir entrer dans ta conditionnelle (et éventuellement rajouter un Try Catch pour voir s'il n'y a pas une exception qui poserait problème) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    'Bien entendu il faut au préalable charger tes données dans le Listview à l'aide de ton DataView :
     
            Dim dvTable As DataTable = dv.ToTable
            For i As Integer = 0 To dvTable .Columns.Count - 1
                ListView_LocatairePrincipal.Columns.Add(dvTable .Columns(i).ColumnName)
            Next
            For i As Integer = 0 To dvTable .Rows.Count - 1
                Dim lvi As New ListViewItem
                lvi.Text = dvTable .Rows(i).Item(0).ToString
                For j As Integer = 1 To dvTable .Columns.Count - 1
                    lvi.SubItems.Add(dvTable .Rows(i).Item(j).ToString)
                Next
                ListView_LocatairePrincipal.Items.Add(lvi)
            Next
            ListView_LocatairePrincipal.View = View.Details
            ListView_LocatairePrincipal.AutoResizeColumn(1, ColumnHeaderAutoResizeStyle.ColumnContent)
     
    'Ensuite on parcours le contrôle ListvIew (j'ai rajouté .Trim et .ToLower au cas ou il y aurait un format bizarre dans ton DGV) :
     
      For Each it As ListViewItem In ListView_LocatairePrincipal.Items
    Try
     
                        'A défaut de mettre un point d'arrêt tu peux contrôler si l'index de chaque ligne est correctement retourné !
                        'Si les valeurs de chaque index s'affichent alors tu as un problème dans ta conditionnelle ! Le cas contraire alors tu as un problème en amont avec le chargement de tes données via Dataview !
                        Msgbox(it.Text)
                        'Si l'ID se situe sur la 1ère colonne de ton Listview
                        If it.Text.trim.tolower = DataGridViewLocataires("ID_Principal_DGV_Locataires", NumLigneDataGridViewLocataires).Value.tostring.trim.tolower Then
                            it.Selected = True
                            Exit for
                        End If
                    Next
    Catch ex as exception
        msgbox(ex.tostring)
    End Try
    A+

  5. #5
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    Bonjour,

    Juste une question à te poser (au cas où j'aurais mal compris ton besoin ) :

    Ne voudrais-tu pas simplement récupérer les infos d'une ligne sélectionné par une action utilisateur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Private Sub ListView_LocatairePrincipal_ItemSelectionChanged(sender as Object, e as ListViewItemSelectionChangedEventArgs) _ 
         Handles ListView_LocatairePrincipal.ItemSelectionChanged
        if e.Isselected
           'Fait ce que tu veux ici avec l'item sélectionné.....
           Msgbox(e.item.text & vbnewline & e.Subitems(1).text & vbnewline & e.Subitems(2).text)
        Else
            'Rien n'est sélectionné ici......
        End if
    End Sub

  6. #6
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2017
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2017
    Messages : 138
    Points : 77
    Points
    77
    Par défaut
    Bonjour wallace1,
    J'ai modifié mon code comme tu le préconises mais ça donne le même résultat.
    La ligne recherchée dans la LISTVIEW est bien trouvée (que ce soit avec mon code qu'avec le tiens) et l'ID est bien le bon dans la MsgBox, cependant la ligne n'est pas surlignée en bleu comme c'est le cas lorsque je clique sur la ligne, c'est ça que je veux obtenir pour visualiser la ligne trouvée par la conditionnelle

    Dans l'exemple suivant l'ID recherché est 21, j'ai mais un label à côté de la ListView pour visualiser l'ID trouvé dans la conditionnelle et on peut voir que le bon ID est bien trouvé, sauf que la ligne de l'ID 21 n'est pas en surbrillance dans la ListView ...
    Nom : Capture d'écran 2017-10-24 09.04.38.png
Affichages : 2775
Taille : 5,0 Ko

  7. #7
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    la proprièté multiselect de ton listview est parametré à False ?
    et Fullrowselect à True ?

    place une msgbox dans ta conditionnelle pour voir si tu entres bien dedans.

  8. #8
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2017
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2017
    Messages : 138
    Points : 77
    Points
    77
    Par défaut
    multiselect de la listview est bien parametré à False
    et Fullrowselect est bien à True

    je rentre bien dans la conditionnelle et l'ID recherché est bien trouvé (j'ai placé une msgbox dans la conditionnelle)

    Le seul problème c'est que la ligne trouvée ne se met pas en surbrillance

  9. #9
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    La propriété HideSelection de ton Listview est-elle à False ?

    et ton Listview a t il le Focus lorsque tu entres dans ta conditionnelle et après ? Pour vérifier cela il faudrait que tu mettes en place la portion que je t'ai postée plus haut (ItemSelectionChangedEventArgs) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Private Sub ListView_LocatairePrincipal_ItemSelectionChanged(sender as Object, e as ListViewItemSelectionChangedEventArgs) _ 
         Handles ListView_LocatairePrincipal.ItemSelectionChanged
        if e.Isselected
           'Fait ce que tu veux ici avec l'item sélectionné.....
           Msgbox(e.item.text & vbnewline & e.Subitems(1).text & vbnewline & e.Subitems(2).text)
        Else
            'Rien n'est sélectionné ici......
        End if
    End Sub
    Ainsi lorsque tu entreras dans ta conditionnelle (sur la ligne it.Selected = True) alors tu devrais avoir la msgBox qui t'affiche :

    A voir...... c'est juste un moyen de contrôler que l'event est géré à l'instant T.

  10. #10
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2017
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2017
    Messages : 138
    Points : 77
    Points
    77
    Par défaut
    C'était HideSelection qui était à True. Merci

    Question complémentaire pour la Listview : sais-tu comment changer la couleur de la sélection par le code et affecter une couleur particulière aux entêtes de colonnes ? Je n'ai pas trouvé dans les propriétés

  11. #11
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    If it.Text.trim.tolower = DataGridViewLocataires("ID_Principal_DGV_Locataires", NumLigneDataGridViewLocataires).Value.tostring.trim.tolower Then
         it.Selected = True
         'Couleur de la police
         it.ForeColor = Color.Green
         'Couleur arrière-plan de l'item
         'it.Backcolor = Color.Blue
         Exit for
    End If
    Tu peux passer ce topic en résolu.

    A+

  12. #12
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2017
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2017
    Messages : 138
    Points : 77
    Points
    77
    Par défaut
    Merci beaucoup wallace1
    A +

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 03/05/2017, 13h54
  2. Réponses: 3
    Dernier message: 18/01/2015, 19h30
  3. [WD18] Metre une colonne d'une Table sur une ligne d'une autre Table
    Par Totophe2 dans le forum WinDev
    Réponses: 2
    Dernier message: 22/11/2013, 13h58
  4. Réponses: 4
    Dernier message: 15/10/2009, 14h33
  5. Réponses: 2
    Dernier message: 24/11/2006, 09h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo