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 :

Recherche dans un dataGrid à partir d'une textBox.


Sujet :

C#

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 40
    Points : 30
    Points
    30
    Par défaut Recherche dans un dataGrid à partir d'une textBox.
    Bonjour, je cherche à obtenir une action de recherche dans un datagrid, lorsque je tape un mot dans une textBox. Du genre, par exemple, avoir le même effet que lorsque je recherche une musique avec la case recherche d'Itunes, ou encore lorsque j'opère une recherche avec la cellule de recherche dans windows 7 ou vista...

    Je sais que je dois utiliser l'évènement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    		private void TBrech_TextChanged(object sender, System.EventArgs e)
    		{
     
    		}
    Mais je n'ai AUCUNE idée de comment faire pour afficher mes résultats de ma recherche dans ce même dataGrid...
    Merci pour votre aide,
    David.

  2. #2
    Membre actif Avatar de el_pedro
    Homme Profil pro
    Inscrit en
    Août 2008
    Messages
    200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 200
    Points : 236
    Points
    236
    Par défaut
    Salut.

    Si j'ai bien compris, tu ne veux pas afficher les résultats dans ta grid, mais plutôt filtrer selon ce qui est entré dans ta textbox.

    Me tromperai - je ??

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 40
    Points : 30
    Points
    30
    Par défaut
    Oui...
    En fait, on tape un mot clé (aussi bien un mot entier, que le début, la fin ou le milieu d'un mot), et simultanément, les résultat du filtrage s'affichent dans le datagrid...
    C'est possible de la faire?

    Merci pour ta réponse El Pedro!

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2008
    Messages
    337
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2008
    Messages : 337
    Points : 456
    Points
    456
    Par défaut
    Ta datagridview est elle déjà chargé en donnée?

    Si oui, de quelle marnière est - elle chargée (bindingSource, Datatable, List<t> ....)?

    il faut que tu agisses non pas sur la datagridview mais sur la source de donnée de ta grid.

  5. #5
    Membre actif Avatar de el_pedro
    Homme Profil pro
    Inscrit en
    Août 2008
    Messages
    200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 200
    Points : 236
    Points
    236
    Par défaut
    C'est en fait ce que je cherchais à savoir, hotsizzle à mieux posé la question que moi.

    Veux tu filtrer les données qui sont directement dans la grid ??
    Utilise tu une collection d'objet pour la charger (tu filtre alors cette collection puis tu affiche le résultat) ??
    Utilise tu une DataSource ou une BindingSource (et alors tu relis ton composant à ta source que tu à filtré avec Linq) ??

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 40
    Points : 30
    Points
    30
    Par défaut
    Ma dataGrid est déja remplie de données: DataSet+SqlDataAdapter...

    Je voudrais filtrer les données déja présentes dans ma dataGrid sans que cela ait de conséquences (ce qui m'étonnerait) sur les données déjà enregistrées dans la BDD

  7. #7
    Membre actif Avatar de el_pedro
    Homme Profil pro
    Inscrit en
    Août 2008
    Messages
    200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 200
    Points : 236
    Points
    236
    Par défaut
    Dans la logique, les données ne se filtrent pas dans la DGV mais dans sa source.

  8. #8
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2008
    Messages
    337
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2008
    Messages : 337
    Points : 456
    Points
    456
    Par défaut
    Tu as 3 solutions :

    - Utiliser un bindingSource pour lier ton dataset a ta grid , puis utiliser la propriété Filter pour filtrer les données.

    - Utiliser la propriété DataTable.DefaultView.RowFilter du datatable qui alimente ta grid

    - Recharger ton dataset en utilisant une requête paramétrée.

    Dans les trois cas, il te faudra utiliser un LIKE pour filtrer tes données.

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 40
    Points : 30
    Points
    30
    Par défaut
    La requête paramétrée est la solution que j'avais employée déja dès le début...

    Mais ca n'as pas l'air de fonctionner. Voici la requêtes, pourriez-vous me dire quelles sont mes erreurs, ou mes éventuels oublis?

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    SqlCommand cmd = new SqlCommand();
    			SqlDataAdapter da = new SqlDataAdapter();
     
    			Cnx2.ConnectionString = "Data Source=LANS0004; Initial Catalog=HW_INVENTORY; Integrated Security=True";
     
    			string req ="SELECT * FROM MATERIELS WHERE Nom LIKE '%@rech%' OR SN LIKE '%@rech%'"+
    				"OR Type LIKE '%@rech%' OR Modele LIKE '%@rech%'"+
    				"OR Site LIKE '%@rech%' OR Service LIKE '%@rech%'"+
    				"OR Date_Entree LIKE '%@rech%' OR Date_Sortie LIKE '%@rech%'"+
    				"OR Fin_Leasing LIKE '%@rech%' OR IP LIKE '%@rech%' OR MAC LIKE '%@rech%'"+
    				"OR Num_Cde LIKE '%@rech%' OR Num_Immo LIKE '%@rech%' OR Num_Contrat LIKE '%@rech%'"+
    				"OR Date_Inventaire LIKE '%@rech%' OR Commentaires LIKE '%@rech%'";
    			cmd.CommandText=req;
     
    			cmd.Parameters.Add("@rech",System.Data.SqlDbType.NVarChar, 20);
    			cmd.Parameters["@rech"].Value = TBrech.Text;
     
     
    			try
    			{
    				Cnx2.Open();
    				da.SelectCommand=cmd;
    				MessageBox.Show("Recherche terminée!");
    				Cnx2.Close();
     
     
    			}
    			catch(Exception ex)
    			{
    				MessageBox.Show(ex.Message);
    			}
    De plus, je me suis un peu emmelé les pinceaux, et je n'ai pas réussi à recharger mon dataSet avec les résultats...

    Enfin, le parametre @rech est susceptible d'être employer pour un filtre de dates: Une erreur de type posera-t-elle problème?

  10. #10
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2008
    Messages
    337
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2008
    Messages : 337
    Points : 456
    Points
    456
    Par défaut
    il me semble que les quottes sont inutile dans une requête paramétrée.

    Essai comme ceci :

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    SqlCommand cmd = new SqlCommand();
    			SqlDataAdapter da = new SqlDataAdapter();
     
    			Cnx2.ConnectionString = "Data Source=LANS0004; Initial Catalog=HW_INVENTORY; Integrated Security=True";
     
    			string req ="SELECT * FROM MATERIELS WHERE Nom LIKE @rech OR SN LIKE @rech"+
    				" OR Type LIKE @rech OR Modele LIKE @rech"+
    				" OR Site LIKE @rech OR Service LIKE @rech"+
    				" OR Date_Entree LIKE @rech OR Date_Sortie LIKE @rech"+
    				" OR Fin_Leasing LIKE @rech OR IP LIKE @rech OR MAC LIKE @rech"+
    				" OR Num_Cde LIKE @rech OR Num_Immo LIKE @rech OR Num_Contrat LIKE @rech"+
    				" OR Date_Inventaire LIKE @rech OR Commentaires LIKE @rech";
    			cmd.CommandText=req;
     
    			cmd.Parameters.Add("@rech",System.Data.SqlDbType.NVarChar, 20);
    //On ajoute les '%' directement dans le paramètre
    			cmd.Parameters["@rech"].Value = "%"+TBrech.Text+"%";
     
     
    			try
    			{
    				Cnx2.Open();
    				da.SelectCommand=cmd;
    				MessageBox.Show("Recherche terminée!");
    				Cnx2.Close();
     
     
    			}
    			catch(Exception ex)
    			{
    				MessageBox.Show(ex.Message);
    			}

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 40
    Points : 30
    Points
    30
    Par défaut
    La requête est executée avec succès, mais rien ne se passe du coté du datagrid...
    J'ai incorporé la requête dans le TextChanged de la TextBox comme ceci:

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    private void textBox1_TextChanged(object sender, System.EventArgs e)
    		{
     
    			SqlCommand cmd = new SqlCommand();
    			SqlDataAdapter da = new SqlDataAdapter();
     
    			Cnx3.ConnectionString = "Data Source=LANS0004; Initial Catalog=HW_INVENTORY; Integrated Security=True";
     
    			string req ="SELECT * FROM MATERIELS WHERE Nom LIKE @rech OR SN LIKE @rech"+
    				" OR Type LIKE @rech OR Modele LIKE @rech"+
    				" OR Site LIKE @rech OR Service LIKE @rech"+
    				" OR Date_Entree LIKE @rech OR Date_Sortie LIKE @rech"+
    				" OR Fin_Leasing LIKE @rech OR IP LIKE @rech OR MAC LIKE @rech"+
    				" OR Num_Cde LIKE @rech OR Num_Immo LIKE @rech OR Num_Contrat LIKE @rech"+
    				" OR Date_Inventaire LIKE @rech OR Commentaires LIKE @rech";
    			cmd.CommandText=req;
     
    			cmd.Parameters.Add("@rech",System.Data.SqlDbType.NVarChar, 20);
    			//On ajoute les '%' directement dans le paramètre
    			cmd.Parameters["@rech"].Value = "%"+TBrech.Text+"%";
     
     
    			try
    			{
    				Cnx3.Open();
    				da.SelectCommand=cmd;
    				Cnx3.Close(); 
    			}
    			catch(Exception EX)
    			{
    				Form1.RTBlog.Text=EX.Message;
    			}
    		}
    try
    {
    Cnx3.Open();
    da.SelectCommand=cmd;
    Cnx3.Close();
    }
    Est-ce que, par hasard, il ne manquerais rpas quelque chose dans le "try"?

  12. #12
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2008
    Messages
    337
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2008
    Messages : 337
    Points : 456
    Points
    456
    Par défaut
    Il manque l'exécution de la requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    try
    {
    Cnx3.Open();
    da.SelectCommand=cmd;
    da.Fill(monDataset);
    Cnx3.Close();
    }

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 40
    Points : 30
    Points
    30
    Par défaut
    Ha, merci!
    Maintenant, une exception est levée:

    Une exception non gérée du type 'System.InvalidOperationException' s'est produite dans system.data.dll

    Informations supplémentaires*: Impossible de changer la propriété 'ConnectionString' lors de la connexion (état=Open).
    En gros, j'ai oublié de fermer ma connexion?

  14. #14
    Membre actif Avatar de el_pedro
    Homme Profil pro
    Inscrit en
    Août 2008
    Messages
    200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 200
    Points : 236
    Points
    236
    Par défaut
    Regarde avant ton "Cnx3.ConnectionString = ...", tu dois avoir un "Cnx3.Open();" quelque part.

  15. #15
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 40
    Points : 30
    Points
    30
    Par défaut
    C'est OK! Tout fonctionne très bien, j'ai juste à modifier ma requête car elle n'affiche pas vraiment ce que je veux!

    Merci de votre aide HotSizzle et el pedro!

    Pour ceux que ca interresse voici le code:

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    private void textBox1_TextChanged(object sender, System.EventArgs e)
    		{
    			Cnx3.ConnectionString = "Data Source=LANS0004; Initial Catalog=HW_INVENTORY; Integrated Security=True";
     
     
    			SqlCommand cmd = new SqlCommand();
    			SqlDataAdapter da = new SqlDataAdapter();
     
     
     
    			string req ="SELECT * FROM MATERIELS WHERE Nom LIKE @rech OR SN LIKE @rech"+
    				" OR Type LIKE @rech OR Modele LIKE @rech"+
    				" OR Site LIKE @rech OR Service LIKE @rech"+
    				" OR Date_Entree LIKE @rech OR Date_Sortie LIKE @rech"+
    				" OR Fin_Leasing LIKE @rech OR IP LIKE @rech OR MAC LIKE @rech"+
    				" OR Num_Cde LIKE @rech OR Num_Immo LIKE @rech OR Num_Contrat LIKE @rech"+
    				" OR Date_Inventaire LIKE @rech OR Commentaires LIKE @rech";
    			cmd.CommandText=req;
     
    			cmd.Parameters.Add("@rech",System.Data.SqlDbType.NVarChar, 20);
    			//On ajoute les '%' directement dans le paramètre
    			cmd.Parameters["@rech"].Value = "%"+TBrech.Text+"%";
     
     
    			try
    			{
    				Cnx3.Open();
    				sqlDataAdapter1.SelectCommand=cmd;
    				sqlDataAdapter1.SelectCommand.Connection=Cnx3;
    				dsMateriel3.Clear();
    				sqlDataAdapter1.Fill(dsMateriel3);
    				Cnx3.Close(); 
    			}
    			catch(Exception EX)
    			{
    				Form1.RTBlog.Text=EX.Message;
    			}
    		}
    Voila, et encore une fois, MERCI!

  16. #16
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2008
    Messages
    337
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2008
    Messages : 337
    Points : 456
    Points
    456
    Par défaut
    De rien tag résolu ?

  17. #17
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2013
    Messages : 60
    Points : 35
    Points
    35
    Par défaut
    Pourriez vous m'expliquer où est ce qu'il ajoute les données a son datagridview?
    Je vois qu'il passe par un dataset mais je ne vois pas l'ajout des données au datagrid
    Merci !!

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 15/01/2014, 20h29
  2. [Débutant] rechercher des valeurs dans une datagrid à partir d'une textbox
    Par franklinw dans le forum C#
    Réponses: 6
    Dernier message: 09/10/2012, 17h30
  3. Réponses: 3
    Dernier message: 16/09/2008, 17h08
  4. Réponses: 4
    Dernier message: 08/01/2007, 23h38
  5. Afficher des données dans un datagrid à partir d'une base de données MySQL
    Par General_Garrisson dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 13/07/2006, 15h14

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