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

VB.NET Discussion :

affichage du resultat d'un select sur une DataGridView sous VB.NET


Sujet :

VB.NET

  1. #1
    Nouveau membre du Club
    Inscrit en
    Août 2010
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 54
    Points : 28
    Points
    28
    Par défaut affichage du resultat d'un select sur une DataGridView sous VB.NET
    Bonjour tout le monde,
    En fait je voudrais afficher le resultat d'un requete "select" d'une base Access, lors d'un buton_click ; sur un DataGridView.
    J'ai écrit ce code là mais le datagridview reste vide.

    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
    Imports System.Data.OleDb
    Public Class Form4
        Dim con As New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\GestsssstAVECRELATION.mdb")
        Dim com As New OleDb.OleDbCommand
        Dim dr As OleDb.OleDbDataReader
        Dim da As New OleDb.OleDbDataAdapter
        Dim ds As New DataSet
     
     Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
     
            ChargerDonnees()
            Form5.Show()
            Me.Hide()
        End Sub
     
        Private Sub ChargerDonnees()
            com.CommandText = ("select * from fournisseur where nom_fournisseur='" & Me.Nom_fournisseurComboBox.Text & "'")
            Dim dt As New DataTable
            Dim adpt As New Data.OleDb.OleDbDataAdapter(com)
            Try
                con.Open()
                adpt.Fill(dt)
                Form45.DataGridView1.DataSource = dt
            Finally
                con.Close()
            End Try
        End Sub
    Mais je ne sais pas qu'est ce qui ne va pas , mais le datagridview du form5 reste vide aprés execution.

    Merci de m'aider.

  2. #2
    Nouveau membre du Club
    Inscrit en
    Août 2010
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 54
    Points : 28
    Points
    28
    Par défaut
    Bonjour

    j'ai ajouté un bout de code , au moins le datagridview se rempli mais sans filtré les données; car je veut qu'il m'afiche seulement les employé concernant le fournisseur choisi lors du form precedent ( Me.Nom_fournisseurComboBox.Text ) , mais là ca m'afiche tout la liste des employés qui sont dans la base.

    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
    Private Sub ChargerDonnees()
            com.CommandText = ("select * from fournisseur where nomfournisseur='" & Me.Nom_fournisseurComboBox.Text & "'")
            Dim dt As New DataTable
            Dim adpt As New Data.OleDb.OleDbDataAdapter(com)
            Dim dr As OleDb.OleDbDataReader
            Try
                con.Open()
                adpt.Fill(dt)
            Finally
             ' le code ajouté '
                dr = com.ExecuteReader
                While dr.Read
                    Form45.DataGridView1.Text = (dr.GetValue(2))
    
                End While
                dr.Close()
                con.Close()
            End Try
        End Sub

    quelqu'un à une solution pour filtrer l'affichage selon le fourniseur choisi par l'utilisateur ???

    merci d'avance

  3. #3
    Membre expert
    Avatar de FailMan
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Janvier 2010
    Messages
    1 602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2010
    Messages : 1 602
    Points : 3 917
    Points
    3 917
    Par défaut
    Hello l'ami,

    Il ne faut pas utiliser Me.Nom_fournisseurComboBox.Text mais Me.Nom_fournisseurComboBox.SelectedValue pour utiliser le texte de la valeur sélectionnée dans le ComboBox.

    De plus ton code me semble bancal :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    While dr.Read
    Form45.DataGridView1.Text = (dr.GetValue(2))
    End While
    Je pense qu'il vaut mieux utiliser ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    While dr.Read
    Form45.DataGridView1.Rows.Add(dr.GetValue(2))
    End While
    Je l'ai pas testé, mais de mémoire il me semble que c'est comme ça que ça marche.
    Une erreur fréquente que les gens font quand ils tentent de réaliser quelque chose à l'épreuve des imbéciles est de sous-estimer l'ingéniosité de ceux-ci. - Douglas Adams

  4. #4
    Nouveau membre du Club
    Inscrit en
    Août 2010
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 54
    Points : 28
    Points
    28
    Par défaut
    merci JohnPetrucci

    mais il me donne une erreur de type :

    'Impossible d'ajouter par programme des lignes à la collection de lignes DataGridView lorsque le contrôle est lié aux données.'
    dans le :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Form45.DataGridView1.Rows.Add(dr.GetValue(1))

  5. #5
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Pour filtrer:
    • utiliser DatagridView -> BindingSource -> DataTable
    • modifier la propriété Filter du BindingSource avec une syntaxe semblable à celle de la clause WHERE d'une command SQL SELECT.
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  6. #6
    Membre émérite Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Points : 2 528
    Points
    2 528
    Par défaut
    Citation Envoyé par unformatdj Voir le message
    Bonjour

    j'ai ajouté un bout de code , au moins le datagridview se rempli mais sans filtré les données; car je veut qu'il m'afiche seulement les employé concernant le fournisseur choisi lors du form precedent ( Me.Nom_fournisseurComboBox.Text ) , mais là ca m'afiche tout la liste des employés qui sont dans la base.

    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
    Private Sub ChargerDonnees()
            com.CommandText = ("select * from fournisseur where nomfournisseur='" & Me.Nom_fournisseurComboBox.Text & "'")
            Dim dt As New DataTable
            Dim adpt As New Data.OleDb.OleDbDataAdapter(com)
            Dim dr As OleDb.OleDbDataReader
            Try
                con.Open()
                adpt.Fill(dt)
            Finally
             ' le code ajouté '
                dr = com.ExecuteReader
                While dr.Read
                    Form45.DataGridView1.Text = (dr.GetValue(2))
    
                End While
                dr.Close()
                con.Close()
            End Try
        End Sub

    quelqu'un à une solution pour filtrer l'affichage selon le fourniseur choisi par l'utilisateur ???

    merci d'avance
    Nan mais il y a un truc qui ne va pas a la base. Tu fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     Try
                con.Open()
                adpt.Fill(dt)
    Ce code devrait marché. Mais au vus de ta toute première erreur, une exception est levé, c'est pour ça que ton datagridview n'affichais rien.

    Pour "contourné", tu utilise un datareader. Mais ça n'a pas de sens. Soit tu vois ce qu'il ne va pas sur ton Adapter.Fill, soit tu utilises directement le reader.

    Si tu utilise le reader, alors il ne faut pas faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Datagridview.Datasource=Me.dt
    Mais as ta place je regarderai plutôt pourquoi ta première méthode ne fonctionne pas.
    L'avenir appartient à ceux... dont les ouvriers se lèvent tôt. (Coluche)

  7. #7
    Membre émérite Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Points : 2 528
    Points
    2 528
    Par défaut
    L'erreur est là:

    Tu créer une connexion... Tu lui fais open... c'est bien. Tu créer un dataadapter, mais ou tu lui dis quelle connexion utilisé ? nul part.

    Il faudrait donc faire ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim adpt As New Data.OleDb.OleDbDataAdapter(com, con)
    Et plus besoin de datareader.

    Pour filtrer deux solutions:

    - comme le dis Graffito, utilisé du Binding
    - Ou beaucoup plus facilement, grâce a ta requête avec une clause where. (faut voir si c'est adapter à ce que tu veux faire.)
    L'avenir appartient à ceux... dont les ouvriers se lèvent tôt. (Coluche)

  8. #8
    Nouveau membre du Club
    Inscrit en
    Août 2010
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 54
    Points : 28
    Points
    28
    Par défaut
    bonjour,
    merci les amis,
    mactwist69 , quand je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim adpt As New Data.OleDb.OleDbDataAdapter(com, con)
    il me genere l'erreur suivante :
    Erreur 1 La résolution de surcharge a échoué, car aucun 'New' accessible ne peut être appelé avec ces arguments*:

    'Public Sub New(selectCommandText As String, selectConnectionString As String)':
    Une valeur de type 'System.Data.OleDb.OleDbCommand' ne peut pas être convertie en 'String'.
    J'ai aussi enlevé le datareader, donc je suis revenu au point de depart, càd le datagridview est vide.

    et pour la methode de filtrage:
    Pour filtrer deux solutions:
    - comme le dis Graffito, utilisé du Binding
    - Ou beaucoup plus facilement, grâce a ta requête avec une clause where. (faut voir si c'est adapter à ce que tu veux faire.)


    qu'est que il faut au juste dans , la propriété filter du buidingSource,?
    ma requete close est ecrite ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    com.CommandText = ("select * from fournisseur where nom_fournisseur='" & Me.Nom_fournisseurComboBox.SelectedValue & "'")
    merci encore de m'aider.

  9. #9
    Nouveau membre du Club
    Inscrit en
    Août 2010
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 54
    Points : 28
    Points
    28
    Par défaut
    merci Graffito

    je essayé d'adapter ta solution et j'ecris comme ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Form5.EmployefrsBindingSource3.Filter = (" nom_fournisseur= '" & Me.Nom_fournisseurComboBox.SelectedValue & "'")
    je mis ça dans le form4 dans un buton-click , pour qu'il m'affiche la liste sur le form5
    mais voilà l'erreur qu'il me genere :
    Impossible de trouver la colonne [nom_fournisseur].

  10. #10
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Sans initialiser Filter, est-ce qu'onvoit la colonne nom_fournisseur (ou nom_fournisseur?) dans le DataGridView ?
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  11. #11
    Nouveau membre du Club
    Inscrit en
    Août 2010
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 54
    Points : 28
    Points
    28
    Par défaut
    dans le datagridview , j'ai les meme champs que la table employés,
    et #nom_fournisseur est une clé etrangere dans la table employé ,
    donc voilà les champs du datagridview:

    nomEmploye; cinEmploye; cnssEmploye; #nom_fournisseur; #datefin

  12. #12
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Si on voit la table complète sans initialiser Filter, c'est donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Form5.EmployefrsBindingSource3.Filter = 
       "(#nom_fournisseur='" & Me.Nom_fournisseurComboBox.SelectedValue & "'")
    Pour faire plus joli :
    - on utilisera un OUTER JOIN dans la SelectCommand pour mettre des colonnes d'info sur le fournisseur,
    - on masquera les colonnes correspondant à des champs sans significations pour l'utilisateur (exemple clé primaires de type AutoIncrément)

    Enfin, un conseil : Utiliser des constantes pour les noms de champs, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    NomFournisseur_Field= "#nom_fournisseur"
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  13. #13
    Nouveau membre du Club
    Inscrit en
    Août 2010
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 54
    Points : 28
    Points
    28
    Par défaut
    tout d'abord merci du fond du coeur Graffito
    donc si je change le code devient :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    con.Open()
            com.CommandText = ("select * from employefrs where #nom_fournisseur='" & Me.Nom_fournisseurComboBox.SelectedValue & "'")
            com.Connection = con
            Dim dt As New DataTable
            'Dim DataGridView1 As New DataGridView
            Dim adpt As New Data.OleDb.OleDbDataAdapter(com)
     dr = com.ExecuteReader
            While dr.Read
                Form45.DataGridView1.Text = dr.GetValue(1)
                Form45.EmployefrsBindingSource3.Filter = (" #nom_fournisseur= '" & Me.Nom_fournisseurComboBox.SelectedValue & "'")
     
            End While
            dr.Close()
            con.Close()
    Et donc lors de la compilation il m genere l'erreur sur le "dr.com.ExecuteReader"
    Erreur de syntaxe dans la date dans l'expression '#nom_fournisseur= ' X '.

  14. #14
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Il faut choisir ta stratégie:
    - soit SELECT avec WHERE et pas de Filter
    - soit SELECT sans WHERE et Filter.

    Sinon, l'instruction Form45.EmployefrsBindingSource3.Filter = ... doit êttre déplacée après le End While.
    après le (" #nom_fournisseur= '" & .

    Pour l'erreur sur le ExecuteReader :
    • Que contient exactement com.CommandText ?
    • Quel est le nom exact du champs ?
    • Pourquoi as-tu abandonné la métode du premier post ( adpt.Fill(dt) puis Form45.DataGridView1.DataSource = dt).?
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  15. #15
    Nouveau membre du Club
    Inscrit en
    Août 2010
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 54
    Points : 28
    Points
    28
    Par défaut
    bonjour
    * Que contient exactement com.CommandText ?
    * Quel est le nom exact du champs ?
    * Pourquoi as-tu abandonné la métode du premier post ( adpt.Fill(dt) puis Form45.DataGridView1.DataSource = dt).?
    je ressayé de continue sur ma methode adapt.fill(dt) ;mais je n'aboutis toujours pas à la solution; alors mon code
    -select contient juste le nom de la table , sans le where , puisque j'utilise le filter
    -le nom exact du champs dans la table fournisseur est nom_fournisseurs
    -relation fournisseur et employer : fournisseur (contient)1,n employe
    -alors dans la table fournisseur, qd on clique sur fournisseur , ses employer viennent en dessous .

    J'espère que vous comprendriez, ce que j'essaie de vous dire , et j'espère trouver la solution , c'est devenu une vraie casse tête depuis 3 jours

    le voici mon code actuellement,

    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 Sub ChargerDonnees()
            com.CommandText = ("select * from fournisseur ") 
            com.Connection = con
            Dim dt As New DataTable
            Dim adpt As New Data.OleDb.OleDbDataAdapter(com)
            Try
                con.Open()
                adpt.Fill(dt)
                Form45.DataGridView1.DataSource = dt
                Form45.FournisseuremployefrsBindingSource.Filter = (" nom_fournisseur= '" & Me.Nom_fournisseurComboBox.SelectedValue & "'")
            Finally
                con.Close()
     
            End Try

  16. #16
    Nouveau membre du Club
    Inscrit en
    Août 2010
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 54
    Points : 28
    Points
    28
    Par défaut
    Enfinnnnn, c'est fait
    merci à vous tous qui ont essayé à m'aider

  17. #17
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Autre

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Bonjour tout le monde, bah on réalisant mon application de projet de fin d'étude, je trouve un problème pour insérer le résultat d'un select dans un dataGrid view.Je désire quand je click sur un bouton "historique", aprés que j’insère un code client dans un textBox, le dataGrid view affiche tous les reglements qu'un client à effectuer .

    sachant que le bouton se trouve dans une fenêtre et le dataGrid view dans une autre fenêtre . Je serai très reconnaissante à votre aide


    voilà le code que j'ai utilisé :


    Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click


    Dim connect As SqlConnection = New SqlConnection("data source =NADIA-PC;Initial Catalog=GESTION;Integrated Security=True")
    Dim da As SqlDataAdapter
    Dim dt As New DataTable
    connect.Open()
    da = New SqlDataAdapter("select * from CLIENTS where code_client=('" & TextBox1.Text & "')", connect)
    dt.Clear()
    da.Fill(dt)


    Fenêtre5.DataGridView1.DataSource = dt
    Fenêtre5.Show()


    End Sub

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

Discussions similaires

  1. Affichage d'un select sur une page php
    Par tib44 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 14/06/2015, 21h40
  2. Réponses: 17
    Dernier message: 23/06/2011, 01h40
  3. Problème SELECT sur une vue sous FB 2.0
    Par Pepere72 dans le forum SQL
    Réponses: 18
    Dernier message: 20/10/2006, 10h55
  4. selection sur une table en fonction de plusieurs ligne
    Par dimdidi dans le forum Langage SQL
    Réponses: 2
    Dernier message: 06/12/2004, 08h42
  5. Recupération des selections sur une DBGrille multi Selection
    Par Andry dans le forum Bases de données
    Réponses: 1
    Dernier message: 26/11/2004, 11h43

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