Le souci avec ta méthode, c'est que tu relances une commande SQL à la DB à chaque fois qu'une lettre est ajoutée dans le TextBox... ce qui risque de faire pas mal de commandes pour peu que l'utilisateur tape vite et qu'il ne se limite pas à un seul caractère...
Pour filtrer un DataGridView, il existe une autre méthode qui est très rapide et qui évite de surcharger la DB avec des SELECT à répétition... la propriété Filter d'un BindingSource.
En gros, tu lances ton SELECT et tu rapatries toutes les données dans un DataTable (ou dans une table d'un DataSet, c'est toi qui voit).
Ensuite, tu crées un BindingSource. Tu affectes sa propriété "DataSource" à ton DataTable (ou à ton DataSet) et, dans le cas d'un DataSet, la propriété "DataMember" au nom de la table du DataSet.
Une fois que c'est fait, tu affectes la propriété "DataSource" de ton DataGridView à ton BindingSource et là, ton dgv va se remplir avec toutes les données.
Une fois ceci fait, tu peux utiliser la propriété Filter du BindingSource pour filter les données dans ton DataGridView... je te donne trois exemples :
Admettons que sKey est le texte de ton TextBox et que POPO est le nom du champ dont les valeurs doivent contenir le texte de ton TextBox :
1 2 3 4 5
| ' Va filtrer pour n'afficher que les tuples qui commencent par sKey.
bs.Filter = "POPO LIKE '" & sKey & "%'"
' Va filtrer pour n'afficher que les tuples qui contiennent sKey.
bs.Filter = "POPO LIKE '%" & sKey & "%'" |
Et admettons que ton champ contient des Date (ou n'importe quel type de données qui ne soit pas une chaîne de caractère...), si tu veux filtrer, tu dois procéder ainsi. Perso, ma DB est Oracle donc je ne sais pas t'affirmer haut et fort que cela fonctionne avec Access mais je te le mets au cas où :
bs.Filter = "CONVERT(POPODATE, 'System.String') LIKE '" & sKey & "%'"
Bonne chance !
Partager