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 :

Rechercher les items dans une listeview [Débutant]


Sujet :

VB.NET

  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 135
    Par défaut Rechercher les items dans une listeview
    Bonjour à tous.

    Voilà mon soucis et je pense qu'en me trounant vers vous, j'aurais très certainement une réponse.

    J'ai une listeview (LvInterpretePasse) dans laquelle il y a 3 colonnes (Interprètes ; Titres chantés ; date et heure)

    J'ai une textbox (TbRecherche), un bouton recherche (BtnRecherche) et un bouton annuler (BtnAnnule)

    Pour ce qui est du remplssage de la listeview, je n'ai aucun problème.
    Pour la sauvegarde pas de soucis non plus. j'ai déjà trouvé de l'aide en consultant ce forum.

    Maintenant, ce que je voudrais, c'est que lorsque que je saisi un nom dans la textbox (TbRecherche) et que je clique sur le bouton (BtnRecherche), il ne s'affiche dans ma listeview que les items correspondants au nom que j'ai saisis.

    Exemple :

    Dans la listeview, colonne interprètes ; Colonne titre chanté ; colonne Date et heure j'ai
    TOTO ; La bonne du curé ; 25/09/2012 21:31:15
    TATA ; Quand la musique est bonne ; 25/09/2012 22:15:10
    TITI ; Partir un jour; 25/09/2012 22:20:55
    TOTO ; Mon vieux ; 25/09/2012 22:25:15
    LULU ; La salsa du démont; 25/09/2012 22:31:18
    TOTO ; Le jerk; 25/09/2012 22:45:05


    Je saisis "TOTO" dans la Textbox, je clique sur Recherche et j'obtiens dans ma listeview
    TOTO ; La bonne du curé ; 25/09/2012 21:31:15
    TOTO ; Mon vieux ; 25/09/2012 22:25:15
    TOTO ; Le jerk; 25/09/2012 22:45:05

    Quand je clique sur un bouton annuler (BtnAnnule), la listeview revient à son état initiale.

    Mais voilà, cela je n'arrive pas à la faire.

    Merci par avance pour votre aide qui j'en suis persuadé me permettra de mener à bien cette fonction.

    @+ Martipit

  2. #2
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    Dans l'évènement OnClick de BtnAnnule, il faut que tu réinitialise le filtre que tu appliques sur la source de données de ton ListView.

    Si tu postes ton code, on pourra t'en dire un peu plus...
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 135
    Par défaut
    salut Matt07

    Pour l'instant, je n'ai même pas de code pour le filtre à appliquer dans ma listeview car je ne sais pas comment faire justement.

    Ce que je peux donner c'est le code que j'utilise pour sauvegarder et remplir ma listeview.

    Code pour la sauvegarde de ma listeview :
    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
    'Déclare la chaîne temporaire qui servira à enregistrer le contenu du tableau
            Dim tmpContenu As String = ""
            'On va maintenant construire la même chose qu'un fichier .csv :
            '   - Chaque ligne est séparée par le caractère VbLf
            '   -Les données de chaque ligne sont séparées par le caractère ";"
     
            'Prend chacune des lignes de la ListView
            For Each I As ListViewItem In LvInterpretePasse.Items
                'Prend chaque sous-élément de l'item actuel
                For Each SI As ListViewItem.ListViewSubItem In I.SubItems
                    'Ajoute la valeur du subitem à la string représentant le tableau (avec le ";" pour séparer les valeurs)
                    tmpContenu = tmpContenu & SI.Text & ";"
                Next
                'Ajoute le caractère VbLf à la string représentant le tableau
                tmpContenu = tmpContenu & vbLf
            Next
            'Retire de la chaîne de la String le ";" excédentaire de chaque ligne
            tmpContenu = tmpContenu.Replace(";" & vbLf, vbLf)
            'Enregistre maintenant cette String dans tes settings
            My.Settings.Sauveliste = tmpContenu
    Code pour le remplissage de la listeview :
    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
    Dim tmpContenu As String
            Dim Lignes As String()
            Dim Cells As String()
            Dim incr As Integer
            Dim Items As ListViewItem()
            'Récupère le tableau dans les settings
            tmpContenu = My.Settings.Sauveliste
            'Divise la String en autant de lignes qu'il y en a (séparées par les VbLf)
            'Attention , comme dans la construction le dernier caractère est VbLf on va se retrouver avec une ligne en trop dont il ne faudra pas tenir compte
            Lignes = Split(tmpContenu, vbLf)
            'Indique le nombre d'items que l'on va ajouter à la ListView
            ReDim Items(Lignes.GetUpperBound(0) - 1) '-1 car il y a une ligne vide en trop dans le fichier
            'Ajoute chaque ligne dans le tableau de données
            For incr = 0 To Lignes.GetUpperBound(0) - 1
                'Divise la ligne en autant de données qu'elle en contient (séparées par des ";")
                Cells = Split(Lignes(incr), ";")
                'Ajoute la ligne à la liste des lignes à ajouter
                Items(incr) = New ListViewItem(Cells)
            Next
            'Ajoute l'ensemble des lignes à la ListView
            LvInterpretePasse.Items.AddRange(Items)
    Voilà ce que j'ai acutellement.

    Merci par avance à toi.

    @+ Martipit

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    505
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2006
    Messages : 505
    Par défaut
    Salut,

    Moi je ferais une recherche directement à partir de tes lignes genre

    For each lg as string in lignes
    if lg.contains("ToTo) then
    'efface ancien ListView
    'Affiche nouveau listView
    etc.

    Puis, si je peut me permettre je ferais ma selection du titre recherché par la selection d'une ligne de la listeView.

    j'espère que ça peut t'aider

    Bon code

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 135
    Par défaut
    Salut Mario.

    Merci pour ton intervention mais mon gros problème est le code pour l'affichage de la nouvelle liste sans pour autant perdre les données de l'ancienne

    @+ Martipit

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    505
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2006
    Messages : 505
    Par défaut
    Le principe est de ne jamais modifier ta liste permanante dans ton settings ainsi tu récupères la liste de recherche à l'interieur de celle çi. Par la suite tu réinicialises ta listeview complète facilement pour retrouver l'ensemble de tes données.

  7. #7
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 135
    Par défaut
    Re Mario

    C'est bien ce que je voudrais faire.
    Maintenant, le tout est de trouver où je dois déclarer ma variable de ma textbox (TbRecherche dans la formule suivante :
    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
    Dim tmpContenu As String
            Dim Lignes As String()
            Dim Cells As String()
            Dim incr As Integer
            Dim Items As ListViewItem()
            'Efface la listview
            LvInterprePasse.items.clear()
            'Récupère le tableau dans les settings
            tmpContenu = My.Settings.Sauveliste
            'Divise la String en autant de lignes qu'il y en a (séparées par les VbLf)
            'Attention , comme dans la construction le dernier caractère est VbLf on va se retrouver avec une ligne en trop dont il ne faudra pas tenir compte
            Lignes = Split(tmpContenu, vbLf)
            'Indique le nombre d'items que l'on va ajouter à la ListView
            ReDim Items(Lignes.GetUpperBound(0) - 1) '-1 car il y a une ligne vide en trop dans le fichier
            'Ajoute chaque ligne dans le tableau de données
            For incr = 0 To Lignes.GetUpperBound(0) - 1
                'Divise la ligne en autant de données qu'elle en contient (séparées par des ";")
                Cells = Split(Lignes(incr), ";")
                'Ajoute la ligne à la liste des lignes à ajouter
                Items(incr) = New ListViewItem(Cells)
            Next
            'Ajoute l'ensemble des lignes à la ListView
            LvInterpretePasse.Items.AddRange(Items)
    @+ Martipit

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    505
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2006
    Messages : 505
    Par défaut
    as-tu lu la section des listviews de la formation de Phillipe Lasserre, tu devrais être en mesure de former ton code pour récupérer tes données.

    tu récupères l'item que tu veux par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Private Sub LvInterpretePasse_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles LvInterpretePasse.SelectedIndexChanged
    If LvInterpretePasse.SelectedIndices.Count > 0 Then
               TextBox.text = LvInterpretePasse.Items(LvInterpretePasse.SelectedIndices.Item(0)).SubItems(0).Text
     
    etc.        End If
    End Sub
    ça pourrait ressembler à ça

  9. #9
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 135
    Par défaut
    Re Mario

    Merci pour ton aide mais le code que tu m'as donné permet de remplir la TbRecherche avec l'item délectionné dans la listview.

    Donc ca ne col pas avec ce que je veux faire.

    Je suis en train de regarder dan la section listview de Phillipe Lasserre
    mais là encore, je ne vois toujours pas o^intégrer dans mon cde ma variable de la tbRecherche.

    @+ Martipit

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    505
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2006
    Messages : 505
    Par défaut
    Tu te fait un sub ... genre,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub rechercheItem()
            Dim ValARech As String = ToolStripTextBox1.Text
            'Tu efface ton ListView
            'Tu fais une recherche dans tes lignes puis tu récupères les lignes qui contiennent le critère "Toto" par exemple 
            'Tu refais ton listView avec les lignes qui ont le critère
     
        End Sub

  11. #11
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 135
    Par défaut
    RE

    Désolé mais là, je ne suis plus du tout

    Peut être serait-il plus simple de me dire quelle ligne de commande je dois ajouter dans mon code pour effectuer cette recherche car plus les posts arrivent et moins je vois ce sue je dois faire.

    Merci

    @+ Martipit

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    505
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2006
    Messages : 505
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub ButRecherche_Click(sender As System.Object, e As System.EventArgs) Handles ButRecherche.Click
            rechercheItem()
     
        End Sub
    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
    Sub rechercheItem()
            Dim tmpContenu As String
            Dim Lignes As String()
            Dim Cells As String()
            Dim incr As Integer
            Dim Items As ListViewItem()
            'Efface la listview
            LvInterprePasse.items.clear()
            'Récupère le tableau dans les settings
            tmpContenu = My.Settings.Sauveliste
            'Divise la String en autant de lignes qu'il y en a (séparées par les VbLf)
            'Attention , comme dans la construction le dernier caractère est VbLf on va se retrouver avec une ligne en trop dont il ne faudra pas tenir compte
            Lignes = Split(tmpContenu, vbLf)
            'Indique le nombre d'items que l'on va ajouter à la ListView
            Dim Compteur As Integer = 0
            For Each lg As String In Lignes
                If lg.Contains("Toto") Then
                    Compteur += 1
                    ReDim Items(Compteur)
                    Cells = Split(Lignes(incr), ";")
                    Items(incr) = New ListViewItem(Cells)
                End If
            Next
            'Ajoute l'ensemble des lignes à la ListView
            LvInterpretePasse.Items.AddRange(Items)
        End Sub
    j'ai pas testé mais ça ressemble à ça

  13. #13
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 135
    Par défaut
    re re re

    Une petite ereur apparait à l'utilisation ) cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     LvInterpretePasse.Items.AddRange(Items)
    Le message est le suivant :
    Avertissement : La variable 'Items' est utilisée avant qu'une valeur ne lui ait été assignée. Une exception de référence null peut se produire au moment de l'exécution.

    @+ Martipit

  14. #14
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    505
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2006
    Messages : 505
    Par défaut
    j'ai testé ça et ça fonctionne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    For Each lg As String In Lignes
                Dim LVI As New ListViewItem
                If lg.Contains("TOTO") Then
                    Cells = Split(lg, ";")
                    LVI.Text = Cells(0)
                    LVI.SubItems.Add(Cells(1))
                    LVI.SubItems.Add(Cells(2))
                    LvInterprePasse.Items.Add(LVI)
                End If

  15. #15
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 135
    Par défaut
    Re

    Impecc Mario

    Ca fonctionne nickel et c'est tout à fait ce que je voulais faire

    Merci à toi pour tout ce temps passé à résoudre mon probleme.

    Ce sujet est donc résolu..

    @+ Martipit

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

Discussions similaires

  1. Rechercher les composants dans une autre interface selon id selectionné
    Par monta_amri dans le forum Développement Web en Java
    Réponses: 6
    Dernier message: 27/04/2015, 17h06
  2. Aligner les item dans une description
    Par Ladgalen dans le forum Mise en forme
    Réponses: 2
    Dernier message: 03/02/2009, 15h01
  3. Rechercher les element d'une liste dans une autre liste
    Par fessebleu dans le forum Langage
    Réponses: 30
    Dernier message: 24/04/2006, 21h23
  4. recherche d'un item dans une ClistCtrl
    Par ledaker dans le forum MFC
    Réponses: 1
    Dernier message: 05/12/2005, 17h01

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