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

Windows Forms Discussion :

filtrer un datagridview


Sujet :

Windows Forms

  1. #1
    Nouveau membre du Club
    Inscrit en
    Novembre 2008
    Messages
    90
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 90
    Points : 36
    Points
    36
    Par défaut filtrer un datagridview
    bonjour,

    j'ai crée form qui contient un textbox et un datgridview je voudrais que lorsque je saisis une lettre dans le textbox ;par exemple la lettre "a" ;les noms qui seront affiché dans le datagridview seulement qui commence par "a "
    voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    sub textbox1_textChanged()
    dim en as new List(Of Article)
    Oledbcommand1.commandText="select Code,Désignation,TVA,Famille From Articles Where Désignation like '" & textbox1.text & "*'" 
    Oledbcommand1.Connection=MaConnection
    MaConnection.Open
    OleDbDataReader1=OleDbCommand1.ExecReader
    while OleDbDAtaReader1.read
    en.add(new Article(OleDbDataReader1.getValue(0),OleDbDataReader1.GetValue(1),OleDbDataReader1.GetValue(2),OleDbDataReader1.GetValue(3)))
    endWhile
    MaConnection.close
    MonDataGridView1.Datasource=en
    mais le DataGridView Apparaît toujours Vide lorsque je saisi un valeur dans le TextBox Et je ne sais pas ou est le problème?

  2. #2
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    Je dirais que le problème c'est le SQL dans le cas présent. Il faut utiliser % au lieu de *. Utilise un outil pour tester les requêtes (SQL Management Studio si tu travailles avec SQL Server par exemple).
    Pas de questions techniques par MP

  3. #3
    Nouveau membre du Club
    Inscrit en
    Novembre 2008
    Messages
    90
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 90
    Points : 36
    Points
    36
    Par défaut re
    bonjour,mais je travaille avec une BD access alors il faut utiliser * au lieu de %

  4. #4
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    32
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 32
    Points : 32
    Points
    32
    Par défaut
    Citation Envoyé par asprog Voir le message
    bonjour,mais je travaille avec une BD access alors il faut utiliser * au lieu de %
    Perso j'utilise des BDD access et j'utilise les '%' ...

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 36
    Points : 35
    Points
    35
    Par défaut
    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 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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ù :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bs.Filter = "CONVERT(POPODATE, 'System.String') LIKE '" & sKey & "%'"
    Bonne chance !

  6. #6
    Nouveau membre du Club
    Inscrit en
    Novembre 2008
    Messages
    90
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 90
    Points : 36
    Points
    36
    Par défaut re
    bonjour,
    oui je connais déjà cette mérhode (filter de BindingSource) mais pour mon cas je ne veux pas travailler avec le dataSet je travaille seulement avec la programmation OrientéObjet.

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 36
    Points : 35
    Points
    35
    Par défaut
    Heu... J'imagine que tu veux dire "Je ne travaille qu'en mode connecté" (donc avec un DataReader) par opposition au "mode déconnecté" (avec un DataAdapter et un DataSet) ?

    Parce que je ne vois pas en quoi un DataSet t'empêche de travailler en orienté objet... ça, c'est le langage de programmation qui le permet ou non. Le fait d'utiliser ou non un DataSet n'y change rien...

  8. #8
    Nouveau membre du Club
    Inscrit en
    Novembre 2008
    Messages
    90
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 90
    Points : 36
    Points
    36
    Par défaut re
    justement,en tout Cas j'ai résolu le probléme de filtrage mais j'ai trouvé un autre probléme que je peux le resoudre avec le bindingSource c'est le tri dans le datagridview lorsque j'utilise la méthode sort de mon DGV ça me donne une erreur.monDGV doit lié à un IBindingSource j'ai écrit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DGV.Sort(DGV.Columns(0),Ascending)
    et encore je veux pas lié monDGV avec un BindingSource

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 36
    Points : 35
    Points
    35
    Par défaut
    Heu, là, j'avoue que je ne comprends pas ce que tu dis... la syntaxe de ton post est un peu bizarre et je ne sais pas du tout comment je dois comprendre ton message... on dirait que tu l'as traduit de l'anglais avec google translate !

  10. #10
    Nouveau membre du Club
    Inscrit en
    Novembre 2008
    Messages
    90
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 90
    Points : 36
    Points
    36
    Par défaut re
    désolée pour ma horrible langue Bon je veux Trier une colonne de mon DatagridView sachant que mon DataGridView n'est pas lié à un BindingSource.

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 36
    Points : 35
    Points
    35
    Par défaut
    Je comprends mieux la question !

    C'est étrange car je viens de tester ceci :

    - J'ai créé un nouveau projet.
    - J'ai ajouté un DataGridView et j'ai inséré 3 colonnes par le Designer.
    - J'ai ajouté un Button qui gère l'évènement onClick avec la procédure suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
     
        DataGridView1.Sort(DataGridView1.Columns(0), System.ComponentModel.ListSortDirection.Ascending)
     
    End Sub
    Je lance mon programme, j'insère des données dans la première colonne et dans la 2ème... et quand je clique sur mon bouton, le tri se fait sans aucun souci...

    Vérifie que ton DataGridView1.DataSource est bien sur Nothing et réessaye... si cela ne fonctionne pas, il faudra éventuellement montrer le code pour que je puisse t'aider.

    Bizz.

    PS: Sinon, n'oublie pas que le tri peut se faire aussi en cliquant sur le titre d'une colonne... il fera le tri en Ascending et, si tu cliques une deuxième fois, en Descending !

  12. #12
    Nouveau membre du Club
    Inscrit en
    Novembre 2008
    Messages
    90
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 90
    Points : 36
    Points
    36
    Par défaut re
    voici mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    form_load
    DatagridView1.dataSource=Article.GetAllArticles
    article est une classe,GetAllArticles est une fonction déclaré shared qui retourne tous les articles a l'aide d'un DataReader

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 36
    Points : 35
    Points
    35
    Par défaut
    Puis-je voir la déclaration et la définition de la méthode GetAllArticles, svp ?

  14. #14
    Nouveau membre du Club
    Inscrit en
    Novembre 2008
    Messages
    90
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 90
    Points : 36
    Points
    36
    Par défaut re
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Public Function GetAllarticles as list(of article)
    dim list as new list(of Article)
    command.lecteur=command.execQuery("Select Codeart,Désignation From articles")
    while command.lecteur.read
    list.add(new Article(Command.lecteur.GetValue(0),Command.lecteur.Getvalue(1)))
    end while 
    Connextion.close
    end function
    ps:Command est une classe que j'ai crée c'est comme un OleDBCommand

  15. #15
    Nouveau membre du Club
    Inscrit en
    Novembre 2008
    Messages
    90
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 90
    Points : 36
    Points
    36
    Par défaut re
    op j'ai oublié de vous mettre Return list

Discussions similaires

  1. Filtrer un DataGridView, sur quel Event ?
    Par dsolheid dans le forum Windows Forms
    Réponses: 2
    Dernier message: 11/01/2008, 16h04
  2. filtrer un DataGridView
    Par will2taz dans le forum VB.NET
    Réponses: 5
    Dernier message: 19/07/2007, 21h20
  3. [VB.NET] Filtrer un datagridview
    Par olbi dans le forum VB.NET
    Réponses: 1
    Dernier message: 10/04/2007, 14h19
  4. [VB.net] Filtrer un datagridview par un DatetimePicker
    Par collaud_vb dans le forum Windows Forms
    Réponses: 12
    Dernier message: 28/09/2006, 10h09
  5. [C#] méthodes pour filtrer un datagridview ?
    Par tikam dans le forum Windows Forms
    Réponses: 3
    Dernier message: 16/08/2006, 13h24

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