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 :

TextBox recherche DYNAMIQUE dans un DataGridView


Sujet :

Windows Forms

  1. #1
    Membre habitué Avatar de Saten
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    203
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 203
    Points : 133
    Points
    133
    Par défaut TextBox recherche DYNAMIQUE dans un DataGridView
    Bonjour, je voudrais savoir s'il était possible de faire un système de recherche un peu spécial dans une application C#.

    Alors voilà, j'ai un datagridview avec des données dedans, et à l'aide d'une textbox, lorsqu'on rentre quelque chose dedans, la ligne sélectionnée dans le datagridview se positionne automatiquement sur les lignes correspondant au critère de recherche qui serait du genre: *.*

    Mais ce sans enlever les autres données, juste se positionner dessus, et dynamiquement ce serait possible?
    Je rentre "A" > la ligne se positionne sur les A, puis je tape "lim", ce qui fait alim, et la ligne se place sur la première row trouvé contenant (pas forcément commencant) par alim...

    que dois-je utiliser? Comment procéder? Si vous pouviez m'éclairer un peu là dessus!
    Merci d'avance.
    Défenseur de l'Apéro Social

  2. #2
    Membre expérimenté Avatar de callo
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2004
    Messages
    887
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Togo

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Février 2004
    Messages : 887
    Points : 1 699
    Points
    1 699
    Par défaut
    Citation Envoyé par Saten Voir le message
    lorsqu'on rentre quelque chose dedans, la ligne sélectionnée dans le datagridview se positionne automatiquement sur les lignes correspondant au critère de recherche qui serait du genre: *.*
    Pas très clair. Sois un peu plus explicite. Veux-tu parler d'afficher seulement les sélections sur les lignes correspondant à tes critères ? Parce que je ne vois pas comment la ligne sélectionnée peut se positionner automatiquement sur les autres lignes.
    N'oubliez pas le tag et

  3. #3
    Membre habitué Avatar de Saten
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    203
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 203
    Points : 133
    Points
    133
    Par défaut
    Juste une fonction de sélection rapide en faite...

    On laisse toutes les données affichées dans le datagridview, mais le text contenu dans la textbox aide à rechercher une chaine de caractère contenue dans une colonne des données.

    Ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    TABLE REF     /       TABLE NOM       
     
    titi05                       titi
    toto04                      toto
    etc.                          etc.
    Je tape dans la textbox : "04", et la ligne se positionne sur toto04 / toto.

    C'est possible?
    Défenseur de l'Apéro Social

  4. #4
    Membre expérimenté Avatar de callo
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2004
    Messages
    887
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Togo

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Février 2004
    Messages : 887
    Points : 1 699
    Points
    1 699
    Par défaut
    Citation Envoyé par Saten Voir le message
    Je tape dans la textbox : "04", et la ligne se positionne sur toto04 / toto.
    Ce n'est pas la ligne qui doit se positionner sur sur toto04/toto. il s'agit plutôt de la sélection.

    Citation Envoyé par Saten Voir le message
    C'est possible?
    Oui. D'abord tu mets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    gridview.SelectionMode = DataGridViewSelectionMode.FullRowSelect
    gridview.MultiSelect = True; //pour autoriser la selection de plusieurs ligne
    Ensuite tu récupères les numeros de ligne correspondant aux data de la gridview qui répondent à tes critères. Puis tu parcours la gridview en faisant quelque chose du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    this.gridview.Rows[numero_ligne].Cells[numero_colonne].Selected = True;
    N'oubliez pas le tag et

  5. #5
    Membre habitué Avatar de Saten
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    203
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 203
    Points : 133
    Points
    133
    Par défaut
    Oui, il est deja sur fullrow select, mais pas multiselect parce que j'utilise une fonction de clic sur une seule ligne pour autre chose.
    Mais comment du coté de ma textbox? obligé de mettre un bouton OK? Ou dynamiquement c'est possible, des que l'utilisateur tape un caractère, cela effectue la recherche? Et comment coder la partie recherche de facon à ce que la cellule d'une colonne "contienne" une chaine de caractères?
    Défenseur de l'Apéro Social

  6. #6
    Membre expérimenté Avatar de callo
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2004
    Messages
    887
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Togo

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Février 2004
    Messages : 887
    Points : 1 699
    Points
    1 699
    Par défaut
    Citation Envoyé par Saten Voir le message
    Oui, il est deja sur fullrow select, mais pas multiselect parce que j'utilise une fonction de clic sur une seule ligne pour autre chose.
    Mais comment du coté de ma textbox? obligé de mettre un bouton OK? Ou dynamiquement c'est possible, des que l'utilisateur tape un caractère, cela effectue la recherche? Et comment coder la partie recherche de facon à ce que la cellule d'une colonne "contienne" une chaine de caractères?
    Que ce soit sur click d'un bouton ou sur l'event onChange d'un textbox, je pense que le problème ne se pose pas. Tu peux utiliser un bindingsource comme datasource de ta gridview. Ensuite, tu appliques ton filtre sur le bindingsource.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    BindingSource.Filter = "REF = 'valeur_du_textbox' ";
    N'oubliez pas le tag et

  7. #7
    Membre habitué Avatar de Saten
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    203
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 203
    Points : 133
    Points
    133
    Par défaut
    J'ai essayé ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    //BindingSource to sync DataTable and DataGridView
                BindingSource bSource = new BindingSource();
                //set the BindingSource DataSource
                bSource.DataSource = dataGridView3;
     
                bSource.Filter = "Reference="+textBox1.Text;
                dataGridView3.Refresh();
    Mais rien ne se passe...désolé si je maitrise pas entièrement...
    Défenseur de l'Apéro Social

  8. #8
    Membre expérimenté Avatar de callo
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2004
    Messages
    887
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Togo

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Février 2004
    Messages : 887
    Points : 1 699
    Points
    1 699
    Par défaut
    Citation Envoyé par Saten Voir le message
    J'ai essayé ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    //BindingSource to sync DataTable and DataGridView
                BindingSource bSource = new BindingSource();
                //set the BindingSource DataSource
                bSource.DataSource = dataGridView3;
     
                bSource.Filter = "Reference="+textBox1.Text;
                dataGridView3.Refresh();
    Mais rien ne se passe...désolé si je maitrise pas entièrement...
    ça ne se passe pas comme ça. ce n'est pas le datagridview que tu mets comme source de données de ton bindingsource. c'est plutôt l'inverse, quelque chose du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
     
    private BindingSource bSource = new BindingSource();
     
    DataGridView3.DataSource = bSource;
     
    //Tu crees ta connextion à la base. supposons qu'elle se nomme connection
    // Créet un DataSet.
    DataSet data = new DataSet();
    SqlDataAdapter myDataAdapter = new
                    SqlDataAdapter("select * from Tatable", connection);
                myDataAdapter.Fill(data, "Tatable");
     
    bSource.DataSource = data;
    bSource.DataMember = "Tatable";
    Ensuite sur le l'event Click de ton bouton tu fais un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    bSource.Filter = "Reference="+textBox1.Text.ToString();
    Mais il va quand même falloir que tu lises à fond les tuto sur les accès aux données, il y en a plein sur ce forum dans la section tutoriels
    N'oubliez pas le tag et

  9. #9
    Membre habitué Avatar de Saten
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    203
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 203
    Points : 133
    Points
    133
    Par défaut
    Oui, enfin tout ce qui est SQL relation SGBD, ja maitrise assez, mais je précise que mon DataGridView est déjà dynamiquement utilisé dans la mesure où c'est la tableau de bord de l'application, et lors du clic sur une ligne, cela génère différents affichages... Donc je ne peux pas refaire de requêtes SQL dedans, sinon ça me plante le reste...

    Je voulais savoir en interne au datagridview, si c'était possible de faire ce que j'ai dit:

    -on tape une chaine de char dans un TB;
    -on click OK;
    -la datagridview selectionne la première ligne qu'il trouve contenant la chaine de char dans la colonne 0 (Reference).

    Rien de plus...rien de moins :s
    Comment faire?
    Défenseur de l'Apéro Social

  10. #10
    Membre extrêmement actif Avatar de fally
    Homme Profil pro
    Développeur .Net / BI
    Inscrit en
    Novembre 2007
    Messages
    966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur .Net / BI

    Informations forums :
    Inscription : Novembre 2007
    Messages : 966
    Points : 1 173
    Points
    1 173
    Par défaut
    oui, on peut faire ce que tu desires
    tu recupères le contenu du textbox, tu parcours ta grid avec un
    grid.Rows[i].Cells[0].Value et tu compares le textbox a cette valeur; tu peux a lieu de comparer voir si ton textbox est contenu dans la cellule et si oui tu fais un select = true

  11. #11
    Membre habitué Avatar de Saten
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    203
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 203
    Points : 133
    Points
    133
    Par défaut
    Merci! C'est exactement ce que je commençais à faire!
    Par contre je bute sur des syntaxes ou des détails je crois...

    voilà mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    private void button1_Click(object sender, EventArgs e)
            {
                string item = textBox1.Text;
                for (int i = 0; i < dataGrid1.Rows.Count;)
                {
                    if (dataGrid1.Rows[i].Cells[0].Value == "'%" + textBox1.Text + "%'")
                    {
                        dataGrid1.Rows[i].Cells[0].Selected = true;
                        i = dataGrid1.Rows.Count;
                    }  
                }
            }
    Il y a un truc qui va pas là dedans?
    Défenseur de l'Apéro Social

  12. #12
    Membre extrêmement actif Avatar de fally
    Homme Profil pro
    Développeur .Net / BI
    Inscrit en
    Novembre 2007
    Messages
    966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur .Net / BI

    Informations forums :
    Inscription : Novembre 2007
    Messages : 966
    Points : 1 173
    Points
    1 173
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    private void button1_Click(object sender, EventArgs e)
    {
       string item = textBox1.Text;
       for (int i = 0; i < dataGrid1.Rows.Count;)
           {
             // le % n'est pris en compte que pour une requete sql
               if (dataGrid1.Rows[i].Cells[0].Value == textBox1.Text) 
                  {
                      dataGrid1.Rows[i].Cells[0].Selected = true;
                  }  
             }
    }

  13. #13
    Membre habitué Avatar de Saten
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    203
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 203
    Points : 133
    Points
    133
    Par défaut
    Ah d'accord. Mais là ça ne marche pas...
    J'explique mes tests:

    -ce que tu a écrit;
    -if (dataGrid1.Rows[i].Cells[0].Value == "une_ref_de_ma_colonne") >> rien ne se passe.
    -je me dis que ma ligne de code "dataGrid1.Rows[i].Cells[0].Selected = true;" ne marche pas, alors je l'essaye en dehors de la seconde boucle, et ça marche...

    Donc c'est ma boucle qui ne trouve rien... :/ Je comprends pas trop là, c'est pourtant ce qu'il faut non?

    EDIT: J'avais aussi oublié la boucle infini, j'ai rectifié. Mais là n'était pas le pb..
    Défenseur de l'Apéro Social

  14. #14
    Membre habitué Avatar de Saten
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    203
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 203
    Points : 133
    Points
    133
    Par défaut
    Détail: j'ai un avertissement sur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dataGrid1.Rows[i].Cells[0].Value == textBox1.Text
    , ça me dit: "possibilité d'une comparaison involontaire; pour obtenir une comparaison de valeurs, effectuez un cast de la partie gauche en type "string" ".

    C'est peut etre ça qui n'irait pas non? Je ne sais pas je n'ai jamais utilisé de cast!
    Défenseur de l'Apéro Social

  15. #15
    Membre expérimenté Avatar de callo
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2004
    Messages
    887
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Togo

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Février 2004
    Messages : 887
    Points : 1 699
    Points
    1 699
    Par défaut
    Citation Envoyé par Saten Voir le message
    Détail: j'ai un avertissement sur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dataGrid1.Rows[i].Cells[0].Value == textBox1.Text
    , ça me dit: "possibilité d'une comparaison involontaire; pour obtenir une comparaison de valeurs, effectuez un cast de la partie gauche en type "string" ".

    C'est peut etre ça qui n'irait pas non? Je ne sais pas je n'ai jamais utilisé de cast!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    dataGrid1.Rows[i].Cells[0].Value == textBox1.Text.ToString();
    N'oubliez pas le tag et

  16. #16
    Membre habitué Avatar de Saten
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    203
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 203
    Points : 133
    Points
    133
    Par défaut
    Bien vu c'est vrai, mais ça ne change rien... arghhh!!!
    Le message d'avertissement n'est plus présent, mais la selection de ligne ne fonctionne pas!

    Pourtant c'est pas une boucle compliquée!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    private void button1_Click(object sender, EventArgs e)
            {
                for (int i = 0 ; i < dataGrid1.Rows.Count;)
                {
     
                    if (dataGrid1.Rows[i].Cells[0].Value == textBox1.Text.ToString())
                    {
                        dataGrid1.Rows[i].Cells[0].Selected = true;
                        i = dataGrid1.Rows.Count;
                    }
     
                    i++;
     
                }
            }
    Défenseur de l'Apéro Social

  17. #17
    Membre extrêmement actif Avatar de fally
    Homme Profil pro
    Développeur .Net / BI
    Inscrit en
    Novembre 2007
    Messages
    966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur .Net / BI

    Informations forums :
    Inscription : Novembre 2007
    Messages : 966
    Points : 1 173
    Points
    1 173
    Par défaut
    ajoute .ToString() à Value dans le code que je te t'ai fourni et exécutes

    EDIT:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    private void button1_Click(object sender, EventArgs e)
            {
                for (int i = 0 ; i < dataGrid1.Rows.Count; i++) // i++
                {
     
                    if (dataGrid1.Rows[i].Cells[0].Value.ToSting() == textBox1.Text)
                    {
                        dataGrid1.Rows[i].Cells[0].Selected = true;
                     }
     
                }
            }

  18. #18
    Membre habitué Avatar de Saten
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    203
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 203
    Points : 133
    Points
    133
    Par défaut
    Citation Envoyé par fally Voir le message
    ajoute .ToString() à Value dans le code que je te t'ai fourni et exécutes
    YES! Niquel! bon ça c'est fait, mais pour en revenir au problème du début, n'y a t'il pas un moyen de faire un: if dataGrid1.Rows[i].Cells[0].Value.ToString() CONTIENT (donc comme % + TB + %) textBox1.Text.ToString() +?

    Car avec 250 Référence, ça ne sert à rien de rechercher une référence rapidement s'il faut taper leur noms à coucher dehors!
    Défenseur de l'Apéro Social

  19. #19
    Membre extrêmement actif Avatar de fally
    Homme Profil pro
    Développeur .Net / BI
    Inscrit en
    Novembre 2007
    Messages
    966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur .Net / BI

    Informations forums :
    Inscription : Novembre 2007
    Messages : 966
    Points : 1 173
    Points
    1 173
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    private void button1_Click(object sender, EventArgs e)
            {
                for (int i = 0 ; i < dataGrid1.Rows.Count; i++) // i++
                {
     
                    if (dataGrid1.Rows[i].Cells[0].Value.ToSting().Contains(textBox1.Text))
                        dataGrid1.Rows[i].Cells[0].Selected = true;                 
                }
            }

  20. #20
    Membre habitué Avatar de Saten
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    203
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 203
    Points : 133
    Points
    133
    Par défaut
    Merci, au début, une erreur subsistait, mais après 20secondes, elle est partie par magie! C'est génial!
    Merci beaucoup en tout cas!

    Je veux pas trop en demander mais serait-il possible de ne pas tenir compte de la casse? Très pratique ...
    Défenseur de l'Apéro Social

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

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. [Toutes versions] TextBox Recherche Dynamique
    Par fabrice57100 dans le forum VBA Access
    Réponses: 2
    Dernier message: 27/09/2012, 20h26
  3. Recherche dynamique dans un contenu
    Par adilou1981 dans le forum Struts 2
    Réponses: 1
    Dernier message: 26/06/2009, 11h06
  4. Réponses: 1
    Dernier message: 08/07/2008, 15h35
  5. Rechercher un élément dans un DataGridView
    Par vb dans le forum VB.NET
    Réponses: 2
    Dernier message: 28/08/2007, 17h31

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