Recherche dans un DatagridView (VISUAL STUDIO / VB-NET)
Bonjour,
Je ne parviens pas à résoudre un problème de recherche dans un DatagridView.
Alors voilà, j'ai un Datagrid qui m'affiche les données venant d'une base de donnée locale (un fichier .mdf).
J'ai placé un TextBox et un Bouton de recherche afin de mettre en évidence le texte recherché à chaque fois qu'il le trouve dans le Datagrid, quelque soit la colonne.
Lorsque j'indique une valeur dans le champ de texte et que je lance la recherche, toutes les cellules contenant le texte recherché sont bien sélectionnées.
Par contre, j'ai également prévu le fait de ne pas trouver la valeur et de l'indiquer avec un message, mais cela ne fonctionne pas.
Après de longues recherches, j'ai fini par comprendre que mon script finissait dans le "Catch ex As Exception" à cause de la dernière ligne du Datagrid qui est vide.
J'ai tenté de passer par des conditions supplémentaires, comme la fonction While afin de ne pas aller à cette ligne vide mais cela ne marche pas.
Quelqu'un pourrait-il m'aider ?
Voici mon code :
Code:
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
|
Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
Try
DataGridView1.ClearSelection()
Dim Trouv As String
Trouv = 0 'je ne sais si il y a une meilleure methode que cette variable "Trouv" pour gérer la recherche
For Each myRow As DataGridViewRow In DataGridView1.Rows
For Each myCell As DataGridViewCell In myRow.Cells
If InStr(myCell.Value.ToString, TextBox4.Text) Then
myCell.Selected = True
Trouv = 1
End If
Next
Next
'Apparemment n'arrive pas à la ligne suivante car sortie du Try !
TextBox4.Text = ""
If Trouv = 0 Then
MessageBox.Show("Valeur non trouvée")
End If
Catch ex As Exception
Exit Sub
End Try
TextBox4.Text = ""
End Sub |
Recherche dans un DatagridView (VISUAL STUDIO / VB-NET)
Voilà, j'ai fini par trouver une solution.
Comme mon DatagridView ne sert qu'à lire le contenu d'une base et que je n'ai pas besoin d'ajouter de ligne manuellement, j'ai mis l'option AllowUserToAddRow à False.
A la lecture des données dans mon DatagridView, la ligne vide à la fin n'est plus visible et mon script va maintenant jusqu'au bout.
J'ai modifié celui-ci pour qu'il affiche un message si le champ de recherche est vide.
Je ne sais pas si un meilleur code est possible mais il répond au besoin.
Code:
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
|
Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
Try
DataGridView1.ClearSelection()
Dim Trouv As String
Trouv = 0
If TextBox4.Text = "" Then
MessageBox.Show("Indiquer une valeur à rechercher")
Else
For Each myRow As DataGridViewRow In DataGridView1.Rows
For Each myCell As DataGridViewCell In myRow.Cells
If InStr(myCell.Value.ToString, TextBox4.Text) Then
myCell.Selected = True
Trouv = 1
End If
Next
Next
TextBox4.Text = ""
If Trouv = 0 Then
MessageBox.Show("Valeur non trouvée")
End If
End If
Catch ex As Exception
Exit Sub
End Try
TextBox4.Text = ""
End Sub |
Recherche dans un DatagridView (VISUAL STUDIO / VB-NET)
Bonjour Phil et merci pour ce retour.
J'essaye ce soir ta solution au cas où j'aurais un autre Datagridview avec une ligne vide que je ne dois pas supprimer. :lol:
Recherche dans un DatagridView (VISUAL STUDIO / VB-NET)
Bonsoir Phil,
Çà ne marchait pas au début, j'ai du ajouter un ToString pour la recherche de la valeur de mon TextBox.
Je suppose que çà doit être dû au contenu de mes données : du texte, des chiffres et même des caractères.
Je n'ai pas trouvé mieux que la variable "Trouv" pour gérer l'absence de résultat pour la recherche.
En tout cas, çà fonctionne parfaitement pour pouvoir gérer une ligne vide. Merci encore ! ;)
Voici le code :
Code:
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
|
Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
Try
DataGridView1.ClearSelection()
Dim Trouv As String
Trouv = 0
If TextBox4.Text = "" Then
MessageBox.Show("Indiquer une valeur à rechercher")
Else
Dim IndexLigne As Integer
Dim IndexColonne As Integer
For IndexLigne = 0 To DataGridView1.Rows.Count - 1
For IndexColonne = 0 To DataGridView1.Columns.Count - 1
If DataGridView1.Item(IndexColonne, IndexLigne).Value.ToString = TextBox4.Text Then
DataGridView1.Item(IndexColonne, IndexLigne).Selected = True
Trouv = 1
End If
Next
Next
TextBox4.Text = ""
If Trouv = 0 Then
MessageBox.Show("Valeur non trouvée")
End If
End If
Catch ex As Exception
Exit Sub
End Try
TextBox4.Text = ""
End Sub |
Recherche dans un DatagridView (VISUAL STUDIO / VB-NET)
Bonjour Phil et merci de ce retour.
En effet, ce serait intéressant pour moi de pouvoir compter le nombre de fois où le texte a été trouvé.
J'essaye çà ce soir !
Avec cette idée, je suppose qu'il est ensuite possible d'enregistrer à chaque fois la position des cellules trouvées et à la fin de repasser par chacune d'elles avec des boutons NEXT/PREVIOUS.
Pour y parvenir, l'utilisation d'une variable de type tableau est-elle une bonne idée ?
Merci encore pour cette aide ! :):):)
Recherche dans un DatagridView (VISUAL STUDIO / VB-NET)
Bonsoir Phil et merci pour toutes ces explications.
Une fois que j'aurai fait la recherche d'une valeur, je vais juste donner la possibilité de repasser sur chacune des valeurs trouvées, alors le premier code me convient tout à fait.
Je ne pense pas devoir revenir sur ces cellules plus tard mais je vais quand même garder l'exemple suivant pour d'autres options !
Merci encore pour cette aide précieuse. :D:D:D