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 :

Afficher ligne Datagridview depuis ComboBox


Sujet :

VB.NET

  1. #1
    Invité
    Invité(e)
    Par défaut Afficher ligne Datagridview depuis ComboBox
    Bonjour,
    J'ai un datagridview que j'ai rempli avec un table access et j'ai rajouter un combobox pour rechercher une information dans mon dgv.

    Mon probleme est le suivant:
    j'ai reussi a remplir mon combobox mais quand je selectionne une valeur je n'arrive pas a afficher les lignes du dgv qui correspondent

    Voici mon code pour l'instant:

    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 Sub Form5_Load(sender As Object, e As EventArgs) Handles MyBase.Load
     
            Dim cn As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;" & "Data Source = Database2.accdb")
            cn.Open()
            Dim cmd As New OleDbCommand("select * from tblToolRequisition", cn)
     
            Dim AdapTContact As OleDb.OleDbDataAdapter
            Dim DtSet As New DataSet()
     
            AdapTContact = New OleDbDataAdapter(cmd)
     
            AdapTContact.Fill(DtSet, "tblToolRequisition")
     
            Dim Matable As DataTable
            Matable = DtSet.Tables("tblToolRequisition")
            DataGridView1.DataSource = Matable
     
            Dim dr As OleDbDataReader = cmd.ExecuteReader
            While dr.Read
                ComboBox1.Items.Add(dr(12).ToString)
            End While
     
            dr.Close()
            cn.Close()
     
        End Sub
     
        Private Sub ComboBox1_Click(sender As Object, e As EventArgs) Handles ComboBox1.Click
     
            Dim cn As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;" & "Data Source = Database2.accdb")
            cn.Open()
            Dim cmd As New OleDbCommand("select * from tblToolRequisition", cn)
            Dim dr As OleDbDataReader = cmd.ExecuteReader
            dr.Read()
            dr.Close()
     
        End Sub
    Merci d'avance pour vos reponses

  2. #2
    Membre Expert Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Par défaut
    Bonjour,

    Je ne comprends pas ... : sous l'événement Click du Combo, tu entreprends un opération d'accès à la DB. Or si je lis bien ta question, le Combo devrait déjà être rempli et le Click d'une de ses valeurs devrait produire la sélection d'une ou plusieurs lignes d'un DataGridView.

    Partant d'un Combox rempli, pour répondre à ta question, il faudrait nous indiquer la correspondance qui existe entre le Combo et le DataGridView, par exemple :
    Le combo contient des localités et le DataGridView contient tous les employés, chacun avec son adresse complète dont la localité est dans une colonne nommée "Loc".
    Le travail serait alors de sélectionner tous les employés que habitent la localité choisie dans le Combo.


    Bref, avec quelques éclaircissements, on pourra peut-être t'aider ...

  3. #3
    Invité
    Invité(e)
    Par défaut
    J'ai entrepris une operation d'access a la data parce que je savais pas quoi faire

    Dans le DataGridView il y a le numero d'une piece (PN), le client et differentes autres informations pour chaque piece. dans le combobox il y a les PN.
    Ce que je voudrais serait de selectionner le PN et d'avoir la/les ligne concernee avec les informations.

  4. #4
    Membre Expert Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Par défaut
    Ceci devrait t'aider :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
            Dim IndexColonne As Integer
            Dim IndexLigne As Integer
            DataGridView1.ClearSelection()
            IndexColonne = DataGridView1.Columns("PN").Index
            For IndexLigne = 0 To DataGridView1.Rows.Count - 1
                If DataGridView1.Item(IndexColonne, IndexLigne).Value = ComboBox1.Text Then
                    DataGridView1Rows(IndexLigne).Selected = True
                End If
            Next
        End Sub
    Bonne soirée,

  5. #5
    Invité
    Invité(e)
    Par défaut
    J'ai essaye mais il m'affiche l'erreur :

    System.NullReferenceException: 'Object reference not set to an instance of an object.'

    J'ai cherche comment faire mais rien ne marche

  6. #6
    Membre Expert Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Par défaut
    Un de tes composants n'est pas nommé comme dans mon code, ou bien a colonne n'est pas correctement nommée, ...
    Note que si l'erreur vient du nom de la colonne, tu peux donner l'index toi-même (de 0 à Count-1, les "CN" sont dans la colonne d'indice ...).
    Tu peux aussi envoyer les codes utilisés et dire sur quelle ligne survient l'erreur.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Le code de depart:

    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
    Public Class Form5
     
        Private Sub Form5_Load(sender As Object, e As EventArgs) Handles MyBase.Load
     
            Dim cn As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;" & "Data Source = Database2.accdb")
            cn.Open()
            Dim cmd As New OleDbCommand("select * from tblToolRequisition", cn)
     
            Dim AdapTContact As OleDb.OleDbDataAdapter
            Dim DtSet As New DataSet()
     
            AdapTContact = New OleDbDataAdapter(cmd)
     
            AdapTContact.Fill(DtSet, "tblToolRequisition")
     
            Dim Matable As DataTable
            Matable = DtSet.Tables("tblToolRequisition")
            DataGridView1.DataSource = Matable
     
            Dim dr As OleDbDataReader = cmd.ExecuteReader
            While dr.Read
                ComboBox1.Items.Add(dr(12).ToString)
                ComboBox2.Items.Add(dr(11).ToString)
                ComboBox3.Items.Add(dr(4).ToString)
                ComboBox4.Items.Add(dr(16).ToString)
            End While
     
            dr.Close()
            cn.Close()
     
        End Sub
    C'est dans le code du combobox qu'il y a l'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
      Private Sub ComboBox1_Click(sender As Object, e As EventArgs) Handles ComboBox1.Click
     
            Dim IndexColonne As Integer
            Dim IndexLigne As Integer
            DataGridView1.ClearSelection()
            IndexColonne = DataGridView1.Columns("PN").Index
            For IndexLigne = 0 To DataGridView1.Rows.Count - 1
                If DataGridView1.Item(IndexColonne, IndexLigne).Value = ComboBox1.Text Then
                    DataGridView1.Rows(IndexLigne).Selected = True
                End If
            Next
     
        End Sub
    A la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IndexColonne = DataGridView1.Columns("PN").Index
    il m'indique l'erreur :System.NullReferenceException: 'Object reference not set to an instance of an object.'

  8. #8
    Membre Expert Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Par défaut
    Re ...
    Là, je confirme que ton DataGridView n'a pas de colonnes nommée "PN".
    Peux-tu me transmettre :
    1. le schéma de ta table dans la DB ou les noms des champs de "tblToolRequisition";
    2. la position de la colonne qui contient les valeurs de PN.

  9. #9
    Invité
    Invité(e)
    Par défaut
    Les noms des champs sont :
    Customer
    ToolCode
    Description
    Priority
    Operation
    PN

    Donc PN est la 6eme colonne

  10. #10
    Membre Expert Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Par défaut
    OK, remplace donc :
    IndexColonne = DataGridView1.Columns("PN").Index
    par
    IndexColonne = 5 ' 5 est l'index de la 6ème, les colonnes étant indicées de 0 à 5
    Merci de me tenir informé du résultat ...

  11. #11
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Desole pour le delai de reponse, j'ai pas acces a VB le week-end.

    J'ai essaye avec la nouvelle ligne et il m'affiche une nouvelle erreur : System.InvalidCastException: 'Conversion from string "" to type 'Double' is not valid.'
    sur la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If DataGridView1.Item(IndexColonne, IndexLigne).Value = ComboBox1.Text Then
    Je remets le code au cas ou :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub ComboBox1_Click(sender As Object, e As EventArgs) Handles ComboBox1.Click
     
            Dim IndexColonne As Integer
            Dim IndexLigne As Integer
            DataGridView1.ClearSelection()
            IndexColonne = 12
            For IndexLigne = 0 To DataGridView1.Rows.Count - 1
                If DataGridView1.Item(IndexColonne, IndexLigne).Value = ComboBox1.Text Then
                    DataGridView1.Rows(IndexLigne).Selected = True
                End If
            Next
     
        End Sub
    Dernière modification par Invité ; 11/03/2019 à 14h38.

  12. #12
    Membre Expert Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Par défaut
    Mais pourquoi donc places-tu l'index de colonne à 12 alors que d'après l'énumération des champs que tu as donnée, les valeurs PN sont dans la colonne d'index 5 (la 6ième colonne, donc index 5).
    De plus, je ne sais rien du type de donnée de cette colonne, vu que tu veux rechercher les lignes sur base du Combo, j'ai supposé que c'était du Text, faudrait pas de PN soit du type Double !!!

  13. #13
    Invité
    Invité(e)
    Par défaut
    Pour l'index c'est parce que j'avais donne que quelques noms, les autres sont confidentiels.
    Dans le combobox les donnees sont des doubles donc j'ai essaye de changer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ComboBox1.Items.Add(dr(12).ToString)
    en double mais ca n' pas marche

  14. #14
    Membre Expert Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Par défaut
    J'ai du mal à comprendre : Les PN sont des numéros de pièce selon ce que tu as indiqué, des "Part Number", comment est-il possible de coder ça en Double ?

    Si ces données PN sont de type Double, le code suivant doit fonctionner :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
            Dim IndexColonne As Integer
            Dim IndexLigne As Integer
            DataGridView1.ClearSelection()
            IndexColonne = 12
            For IndexLigne = 0 To DataGridView1.Rows.Count - 1
                If DataGridView1.Item(IndexColonne, IndexLigne).Value = Ctype(ComboBox1.Text, Double) Then
                    DataGridView1.Rows(IndexLigne).Selected = True
                End If
            Next
    Si ça na va pas, tu dois m'envoyer TOUT les noms de champs, avec leur type, et dans le bon ordre.
    Et je ne te demandes pas les données : confidentiel ou pas, c'est pas avec des noms de champs que je vais pirater la banque nationale ou la sureté de l'Etat ...

  15. #15
    Invité
    Invité(e)
    Par défaut
    ca ne marche toujours pas et t'as raison les PN sont en text. je t'envoie toutes les donnees:

    Nom : Capture1.PNG
Affichages : 692
Taille : 8,0 Ko

  16. #16
    Membre Expert Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Par défaut
    OK, si c'est du Text, ça doit pouvoir être comparé à Combo1.Text, sans aucune conversion.
    Le champ PN est effectivement le 13ème dans la DB, donc à l'indice 12.
    Mais TOUT les champs sont-ils reproduits dans le DataGridView ? Par exemple, si l'identifiant informatique (RequisitionID) n'est pas chargé dans le DataGridView, le 13ème champ de la DB devient le 12ème dans le DataGridView, celui d'indice 11 !
    Vérifie la position des PN dans le DataGridView, en commençant à compter par 0 pour la première colonne ...µ
    Si l'erreur se manifeste encore, indique-moi la ligne de code fautive.
    A tantôt,

  17. #17
    Invité
    Invité(e)
    Par défaut
    EN effet j'avais changé les colonnes dans le dgv mais j'ai tjrs une erreur :
    System.InvalidCastException: 'Operator '=' is not defined for type 'DBNull' and string "".'

    A la ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If DataGridView1.Item(IndexColonne, IndexLigne).Value = ComboBox1.Text Then

  18. #18
    Membre Expert Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Par défaut
    C'est donc qu'il existe dans le DataGridView des lignes sans PN.
    Je pense que le code suivante va te dépanner :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
            For IndexLigne = 0 To MiDGV.Rows.Count - 1
                If Not DataGridView1.Item(IndexColonne, IndexLigne).Value Is Nothing Then
                    IfDataGridView1.Item(IndexColonne, IndexLigne).Value = ComboBox1.Text Then
                        DataGridView1.Rows(IndexLigne).Selected = True
                    End If
                End If
            Next
    Sinon, il y a celui-ci (même si ce n'est pas la méthode la plus élégante) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
            For IndexLigne = 0 To MiDGV.Rows.Count - 1
                Try
                    If DataGridView1.Item(IndexColonne, IndexLigne).Value = ComboBox1.Text Then
                        DataGridView1.Rows(IndexLigne).Selected = True
                    End If
                Catch
                End Try
            Next
    Merci de me confirmer que tu es dépanné ...

  19. #19
    Invité
    Invité(e)
    Par défaut
    Super y a plus d'erreur mais il ne selectionne pas les donnees correspondantes

  20. #20
    Membre Expert Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Par défaut
    Re-vérifie tes indices de colonnes du DataGridView, tu as certainement un mauvais indice.
    Autre chose, il faut que ton Combo reçoive les mêmes données que dans la colonne PN.
    Tiens-moi au courant, je devrais avoir du temps demain.
    Bonne nuit

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

Discussions similaires

  1. [XL-2007] Ajout de lignes dans listes viex depuis combobox puis calculer
    Par stephadm dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 06/08/2011, 23h38
  2. Afficher des images depuis une table dans combobox
    Par sihammaster dans le forum VB.NET
    Réponses: 2
    Dernier message: 13/04/2010, 20h51
  3. DataGridView avec comboBox sur les lignes
    Par gentelmand dans le forum Windows Forms
    Réponses: 1
    Dernier message: 09/03/2009, 14h46
  4. Réponses: 13
    Dernier message: 14/04/2008, 15h30
  5. afficher une image depuis un combobox
    Par ghosthacker dans le forum MFC
    Réponses: 5
    Dernier message: 11/06/2007, 11h35

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