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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé 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
    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.

  2. #2
    Membre Expert 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
    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.

  3. #3
    Membre confirmé 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
    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?

  4. #4
    Membre Expert 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
    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;

  5. #5
    Membre confirmé 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
    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?

  6. #6
    Membre Expert 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
    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' ";

  7. #7
    Membre confirmé 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
    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...

  8. #8
    Membre Expert 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
    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

  9. #9
    Membre confirmé 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
    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?

  10. #10
    Membre très 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
    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 confirmé 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
    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?

  12. #12
    Membre confirmé 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
    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 ...

  13. #13
    Membre Expert 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
    Par défaut
    Citation Envoyé par Saten Voir le message
    Je veux pas trop en demander mais serait-il possible de ne pas tenir compte de la casse? Très pratique ...
    utilise .ToUpper() ou .ToLower() pour enlever la casse.

  14. #14
    Membre confirmé 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
    Par défaut
    d'accord, mais si je veux que la saisie ne tienne pas du tout compte de la casse? Pas convertir upper en Lower ou inversement?

  15. #15
    Membre Expert 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
    Par défaut
    Citation Envoyé par Saten Voir le message
    d'accord, mais si je veux que la saisie ne tienne pas du tout compte de la casse? Pas convertir upper en Lower ou inversement?
    .
    Le code qui suit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    myString.ToLower().Contains(searchString.ToLower()):
    ignore la casse étant donné que tous les caractères sont convertis en minuscule.

    Autre méthode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    using System.Globalization; 
    string s = "aBcDXyZeFgHi";
    CompareInfo ci = CultureInfo.CurrentCulture.CompareInfo;
    Console.WriteLine (ci.IndexOf(s, "xYz", CompareOptions.IgnoreCase));

  16. #16
    Membre confirmé 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
    Par défaut
    Merci! C'est super, tout fonctionne bien!
    Merci à vous, vraiment beaucoup! Op' résolu, à bientot (pas parce que j'aurais des problèmes forcément hein?).

  17. #17
    Futur Membre du Club
    Inscrit en
    Mai 2003
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 5
    Par défaut TextBox Recherche Dynamique dans un datagridView
    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;
    }
    }

    Bonjour,
    J'ai utilisé ce morceau de code dans mon programme. Mais il affiche une erreur de non gestion de l'exception ArgumentOutOfRangeException. L'index est hors limites....

    Est-ce que vous pouvez m'aider? M'indiquer ce qu'il faut faire pour soulever cette exception?

    Merci d'avance.

+ 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. [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