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

C# Discussion :

Filtrage DataGridView via TextBox


Sujet :

C#

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 10
    Points : 5
    Points
    5
    Par défaut Filtrage DataGridView via TextBox
    Bonjour à tous et à toutes,

    J'espère pouvoir trouver mon bonheur ici car j'ai quelques petits problèmes concernant C#. En effet, je débute complètement dans ce langage ainsi que dans la programmation logicielle (ayant fait plus de la robotique, ça n'a fichtrement rien à voir ^^) et j'aurai besoin de votre précieuse aide, en essayant de m'exprimer du mieux que je peux.

    Donc, pour commencer, j'ai une fenêtre dans laquelle j'ai un DataGridView qui affiche les données d'une BdD SQLServer via un DataSet, le tout fait dans un DAL. Jusque là, tout fonctionne bien (même si j'ai déjà pas mal galéré à chercher tout seul).
    Mais voilà que j'aimerai pouvoir faire un filtrage de ce DataGridView et pas n'importe comment ; j'aimerai pouvoir utiliser une TextBox qui me permettra de le filtrer dynamiquement via une colonne de la BdD (je ne sais pas si c'est clair).
    En fait, j'aimerai que, dès lors que je tape les premières lettres d'une colonne, le DataGridView puisse afficher uniquement les lignes correspondantes aux lettres que j'aurais rentré dans la TextBox.
    Le truc c'est que je ne vois pas comment faire, mais vraiment pas du tout, et c'est pourquoi j'aurai besoin d'une âme bienveillante puissant m'aider.

    Merci d'avance pour votre aide, si petite soit-elle

    PS : Excusez-moi si le sujet ne se trouve pas dans la bonne partie du forum.

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    C'est tout simple en fait

    Si tu as créé ton UI avec le designer, je suppose que ton DataGridView est lié au DataSet via une BindingSource ? La BindingSource a une propriété Filter qui permet de filtrer le contenu de la source de données. Si tu modifies le filtre quand l'utilisateur saisit quelque chose dans la TextBox, ça changera le contenu du DataGridView.

    Par exemple, si tu as une colonne "Nom" et que tu veux filtrer selon cette colonne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void textBoxFiltreNom_TextChanged(object sender, EventArgs e)
    {
        bindingSourceClients.Filter = string.Format("Nom LIKE '%{0}%'", textBoxFiltreNom.Text.Replace("'", "''"));
    }
    (note le Replace pour doubler les apostrophes : sans ça tu auras une erreur avec un nom qui contient une apostrophe)

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    En fait, le DataGridView n'est pas relié au DataSet via BindingSource (à moins que ce soit implicite, mais là, il y a quelque chose qui a du m'échapper).
    J'ai une classe DataAccessLayer (un singleton) qui se charge de la couche des données, qui est appelée dans ma fenêtre Winform de cette manière (je sépare les différentes couches au maximum afin de m'embrouiller le moins possible et de savoir quoi coder, et où) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dataGridViewBlabla.DataSource = DataAccessLayer.getData().Tables["Blabla"];
    getData() étant une méthode statique de DataAccessLayer retournant un DataSet comprenant toutes les tables de la base de données dont j'ai besoin.
    Ici, j'entre donc ma table "Blabla" dans le DataGridView afin de l'afficher dans ma fenêtre.

    J'ai bien un BlablaBindingSource mais je ne l'utilise pas, car mon but est de ne pas travailler directement dans la base de données, mais bien de passer par une couche au dessus (ici, la DAL).

    Merci pour la réponse en tout cas, j'en apprends davantage encore grâce à ce post =).

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par Xandreela Voir le message
    J'ai bien un BlablaBindingSource mais je ne l'utilise pas, car mon but est de ne pas travailler directement dans la base de données, mais bien de passer par une couche au dessus (ici, la DAL).
    Et alors ? Je ne vois pas le rapport... le fait de passer par la BindingSource ne change pas grand chose en fait. Il suffit que tu affectes la table à la DataSource de la BindingSource (en laissant la BindingSource comme DataSource du DataGridView), et tu obtiendras le même résultat.

    Sinon, tu peux aussi créer explicitement une DataView :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    private DataView _blablaView;
     
    ...
     
    DataTable table = DataAccessLayer.getData().Tables["Blabla"];
    _blablaView = new DataView(table);
    dataGridViewBlabla.DataSource = _blablaView;
    Et ensuite tu fais pareil que ce que j'ai dit dans mon poste précédent, mais avec la propriété RowFilter de la DataView

  5. #5
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    J'ajoute que le dataview a aussi une propriété sort et une methode Find qui ne sont que du bonheur

    Plus magique encore

    Si tu declare un ComboBox et que tu assigne ta DataSource a ton Combo

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    MonCombo.DisplayMember="Nom";
    MonCombo.ValueMember="Nom";
    MonCombo.DataSource=_blablaView ;
    Un changement de selection dans le Combo te repositionnera automatiquement dans le DGV

    C'est presque aussi sympa que les automates non ?
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Merci beaucoup tomlev, c'est exactement ce qu'il me fallait.
    Et merci aussi à olibara, parce que ça pourra me servir à l'avenir.

    Je mets le sujet en résolu =)

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2013
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2013
    Messages : 1
    Points : 1
    Points
    1
    Par défaut DataGridView
    j'ai un problème concernant le filtrage à partir d'une datagridView.J'ai une fenêtre dans laquelle j'ai un DataGridView qui affiche les données d'une BdD MySql avec le connecteur ODBC Driver 5.1
    ma question est comment crée un filtrage de ce DataGridView en utilisant une TextBox qui me permettra de le filtrer une colonne de Base des données
    j'aimerai que, lors que je tape les premières lettres d'un champs, le DataGridView puisse afficher uniquement les lignes correspondantes aux lettres que j'aurais rentré dans la TextBox.

  8. #8
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Bonjour

    Je suppose que le DataSource de ton DataGridView est une DataTable ?
    La solution est de passer par un DataView :

    Tu creé un DataView a partir de ta DataTable

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DataView MaDataView=new DataView(MaDataTable);
    Tu utilise ce DataView comme DataSource de ton DataGridView

    Avec la valeur de ton textbox tu modifie le RowFilter de ton DataView

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MaDataView.RowFilter="monchamp LIKE %unevaleur%";
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

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

Discussions similaires

  1. [Débutant] Recherche de row dans un DataGridView via une textbox
    Par patrickvier dans le forum VB.NET
    Réponses: 27
    Dernier message: 11/03/2015, 14h08
  2. Modification d'une ligne d'un datagridview via checkbox
    Par DiamonDonald dans le forum Windows Forms
    Réponses: 7
    Dernier message: 08/04/2008, 23h42
  3. DataGridView et TextBox
    Par will2taz dans le forum ASP.NET
    Réponses: 1
    Dernier message: 11/07/2007, 21h26
  4. Recherche d'infos dans une bd via textbox
    Par lordgodgiven dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 10/09/2006, 17h59
  5. [C# 2.0] Mise à jour d'un DataGridView via le binding
    Par oodini dans le forum Windows Forms
    Réponses: 5
    Dernier message: 01/07/2006, 22h08

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