Rechercher dans une listview

dsigmoun Messages postés 135 Date d'inscription jeudi 31 juillet 2008 Statut Membre Dernière intervention 25 février 2023 - 19 janv. 2009 à 12:34
dsigmoun Messages postés 135 Date d'inscription jeudi 31 juillet 2008 Statut Membre Dernière intervention 25 février 2023 - 23 janv. 2009 à 10:17
Bonjour à tous,

J'ai des données qui sont dans une listview composées de 2 colonnes. Je souhaiterai faire une recherche dans la deuxième colonne de la listview (qui contient les mots clés) et afficher les résultats dans une lisbox.

Comment procéder pour réaliser cette recherche ?

Merci par avance pour votre aide,

8 réponses

dsigmoun Messages postés 135 Date d'inscription jeudi 31 juillet 2008 Statut Membre Dernière intervention 25 février 2023 2
19 janv. 2009 à 18:09
J'ai mis ce bout de code mais j'ai toujours la même ligne qui s'affiche !

For Each ListViewItem In ListView1.Items
            Dim foundItem As ListViewItem = _
      ListView1.FindItemWithText(TextBox1.Text, True, 0, True)
            If foundItem IsNot Nothing Then
                ListBox2.Items.Add(foundItem.Text)
            End If
Next
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
19 janv. 2009 à 20:59
Re
As-tu au moins regardé dans l'aide ?
Il est dit que FindItemWithText recherche le premier terme.
Pour chercher le suivant, il suffit de lui dire où recommencer.
Tout est expliqué dans l'aide, tu sais lire pourtant !

ListView1.Items.Add(

"toto 1")
ListView1.Items.Add(
"toto 2")
ListView1.Items.Add(
"marcel")
ListView1.Items.Add(
"toto 3")

Dim item1
As ListViewItem = ListView1.FindItemWithText(
"toto")

Do
While
Not item1
Is
Nothing
   Debug.Print(
"Trouvé " & item1.ToString)
   item1 = ListView1.FindItemWithText(
"toto",
False, item1.Index + 1)

Loop

Pourquoi fais-tu une énumération des items de ta ListView ?

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
dsigmoun Messages postés 135 Date d'inscription jeudi 31 juillet 2008 Statut Membre Dernière intervention 25 février 2023 2
20 janv. 2009 à 16:28
Merci jack pour ton aide,

Je suis novice et je dois mal m'y prendre.
Ta solution me permet effectivement de faire des recherches mais si le mot recherché est le deuxième mot de la cellule, il ne le trouve pas.

Voici que je fais exactement :

1- Je charge un fichier excel
que je mets dans une listview
qui est masquée

La première colonne est composé du nom des fichiers pdf
La deuxième colonne est composé de mots clés (plusieurs par cellule)

  ' Création des colonnes pour les items et ses  subitems.
            ListView1.Columns.Add("nom du fichier", 130, HorizontalAlignment.Left)
            ListView1.Columns.Add("mots clés", 115, HorizontalAlignment.Left)
            '   Création de la listview avec les propriétés que vous voulez :
            ListView1.View = View.Details
            ListView1.LabelEdit = True
            ListView1.AllowColumnReorder = True
            'listview1.CheckBoxes = True
            ListView1.FullRowSelect = True
            ListView1.GridLines = True
            'listview1.Sorting = SortOrder.Ascending
            Dim MyConnection As System.Data.OleDb.OleDbConnection

            MyConnection = New System.Data.OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Application.StartupPath + "\bd.xls;Extended Properties=Excel 8.0;")

            If Form1.Label1.Text = "2" Then
                Dim MyCommand As System.Data.OleDb.OleDbDataAdapter = New System.Data.OleDb.OleDbDataAdapter("select * from [baseco$]", MyConnection)
                Dim DS As System.Data.DataSet = New System.Data.DataSet
                MyCommand.Fill(DS)
                Dim TableExcel As DataTable
                TableExcel = DS.Tables(0)
                For i = 0 To TableExcel.Rows.Count - 1

                    ListView1.Items.Add(TableExcel.Rows(i).Item(0).ToString)
                    ListView1.Items(i).SubItems.Add(TableExcel.Rows(i).Item(1).ToString)
                Next   Création des colonnes pour les items et ses  subitems.
            ListView1.Columns.Add("nom du fichier", 130, HorizontalAlignment.Left)
            ListView1.Columns.Add("mots clés", 115, HorizontalAlignment.Left)
            '   Création de la listview avec les propriétés que vous voulez :
            ListView1.View = View.Details
            ListView1.LabelEdit = True
            ListView1.AllowColumnReorder = True
            'listview1.CheckBoxes = True
            ListView1.FullRowSelect = True
            ListView1.GridLines = True
            'listview1.Sorting = SortOrder.Ascending
            Dim MyConnection As System.Data.OleDb.OleDbConnection

            MyConnection = New System.Data.OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Application.StartupPath + "\bd.xls;Extended Properties=Excel 8.0;")

            If Form1.Label1.Text = "2" Then
                Dim MyCommand As System.Data.OleDb.OleDbDataAdapter = New System.Data.OleDb.OleDbDataAdapter("select * from [baseco$]", MyConnection)
                Dim DS As System.Data.DataSet = New System.Data.DataSet
                MyCommand.Fill(DS)
                Dim TableExcel As DataTable
                TableExcel = DS.Tables(0)
                For i = 0 To TableExcel.Rows.Count - 1
                    ListView1.Items.Add(TableExcel.Rows(i).Item(0).ToString)
                    ListView1.Items(i).SubItems.Add(TableExcel.Rows(i).Item(1).ToString)
                Next
                MyConnection.Close()
            End If

2- Je mets les éléments de la première colonne de la listview dans une listbox visible et cliquable

          
            For x = 0 To ListView1.Items.Count - 1
                ListBox2.Items.Add(ListView1.Items(x).Text.ToString) '
                ListBox3.Items.Add(ListView1.Items(x).Text.ToString)
            Next

3- Pour faire les recherches à partir d'un textbox1

'moteur de recherche
ListBox2.Items.Clear()
        If TextBox1.Text <> "" Then
            Dim item1 As ListViewItem = ListView1.FindItemWithText(TextBox1.Text)
            Do While Not item1 Is Nothing
                ListBox2.Items.Add(item1.Text)
                If item1.Index < ListView1.Items.Count - 1 Then
                    item1 = ListView1.FindItemWithText(TextBox1.Text, True, item1.Index + 1)
                End If
            Loop
        Else
            For x = 0 To ListView1.Items.Count - 1
                ListBox2.Items.Add(ListView1.Items(x).Text.ToString)
            Next

        End If

Voici le détail de ce que je fais. S'il est possible de le faire plus simplement (facilement vu mes compétences ), je suis preneur.

Merci d'avance
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
21 janv. 2009 à 20:47
Et as-tu essayé de faire précéder (et suivre ?) le mot que tu cherches par une étoile ?
   .FindItemWithText("*toto")

Peut-être que ça tombera en marche
0

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

Posez votre question
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
21 janv. 2009 à 20:49
Si tu mets True dans le FindItemWithText, il cherchera aussi dans les SubItems : C'est vraiment ce que tu veux ?
+ Il faut gérer l'Exception car, à un moment donné, Index + 1 dépassera la fin de la liste
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
21 janv. 2009 à 20:53
Oups, j'avais pas vu le test de l'index de ListView1 : bien vu
0
dsigmoun Messages postés 135 Date d'inscription jeudi 31 juillet 2008 Statut Membre Dernière intervention 25 février 2023 2
23 janv. 2009 à 10:17
Merci pour ton aide jack,

J'ai abandonné le listview pour mettre les infos dans un listbox où la recherche fonctionne mieux :

Dim item As String
        For x = 0 To lsttotal.Items.Count - 1
            item = Lstmotcle.Items(x)
            If item.Contains(TextBox1.Text.ToLower) Then
                lstclicversion.Items.Add(lsttotalversion.Items(x))
                Lstclic.Items.Add(lsttotal.Items(x))          
            End If
        Next
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
19 janv. 2009 à 13:37
Salut
Catégorie Base de données + XML et tu nous parles de ListView : Bien choisi !

N'y aurait-il pas plusieurs méthodes Find dans les ListView sous vb.NET ?

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
-1
Rejoignez-nous