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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    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
    Je suppose que tous tes Combox ne sont chargés avec de PN ...
    Je suppose que le ComboBox1 présente les PN, ComboBox2 présente les ..., ...

    Tu peux alors refaire ce que j'ai fait pour chaque Combo :
    Une requête avec l'ajout d'une UneTable dans le DtSet et le renommer de sorte à la retrouver
    Pour le renommer, la dernière table ajoutée étant à l'indice Count-1, tu devrais pour écrire DtSet.Tables(DtSet.Tables.Count -1).TableName = ...
    Lier le Combo à la table que tu viens de faire et au champ de donnée concerné :
    ComboBox.DataSource = DtSet.Tables("Le nom de la table")
    ComboBox.DisplayMembre = "Le nom du champ")

    Mais l'organisation de ton code (si je peux me permettre n'est pas optimale ...
    Lorsqu'on écrit des fonctions distinctes pour la collecte des données dans la DB et pour la liaison de ces données aux composants visuels, le programme devient plus lisible et semble alors plus simple ...

  2. #2
    Invité
    Invité(e)
    Par défaut
    j'ai a peu pres compris suaf pour cn car au debut il correspond a PN et apres il correspond a tblToolRequisition donc j'ai essaye de rajouter la combobox 2 mais il 'affiche qu'1 seule colonne et ne remplis que le combobox1
    C'est ce que j'ai essaye meme si c'est faux

    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
            Dim ChaineConnexion As String = "Provider=Microsoft.ACE.OLEDB.12.0;" & "Data Source = Database2.accdb"
     
            Dim DtSet As New DataSet()
     
            Dim UneTable1 As New DataTable
            Dim UneTable2 As New DataTable
            Dim UneTable3 As New DataTable
            Dim UneTable4 As New DataTable
     
            Dim cn1 As New OleDbDataAdapter("select distinct PN from tblToolRequisition Order by PN asc", ChaineConnexion)
            Dim cn2 As New OleDbDataAdapter("select distinct CustomerName from tblToolRequisition Order by CustomerName asc", ChaineConnexion)
            Dim cn3 As New OleDbDataAdapter("select distinct ToolDRG from tblToolRequisition Order by ToolDRG asc", ChaineConnexion)
            Dim cn4 As New OleDbDataAdapter("select distinct RequistionNum from tblToolRequisition Order by RequistionNum asc", ChaineConnexion)
     
            cn1.Fill(UneTable1)
            cn2.Fill(UneTable2)
            cn3.Fill(UneTable3)
            cn4.Fill(UneTable4)
     
            DtSet.Tables.Add(UneTable1)
            DtSet.Tables.Add(UneTable2)
            DtSet.Tables.Add(UneTable3)
            DtSet.Tables.Add(UneTable4)
     
            DtSet.Tables(0).TableName = "tblPN"
            DtSet.Tables(DtSet.Tables.Count - 1).TableName = "tblCustomer"
     
            Dim AdapTContact1 As OleDb.OleDbDataAdapter
     
            UneTable1 = New DataTable
            UneTable2 = New DataTable
            UneTable3 = New DataTable
            UneTable4 = New DataTable
     
            cn1 = New OleDbDataAdapter("select * from tblToolRequisition", ChaineConnexion)
            cn1.Fill(UneTable1)
            DtSet.Tables.Add(UneTable1)
            DtSet.Tables(1).TableName = "tblToolRequisition"
     
            DataGridView1.DataSource = DtSet.Tables("tblToolRequisition")
     
            ComboBox1.DataSource = DtSet.Tables("tblPN")
            ComboBox1.DisplayMember = "PN"
     
     
     
            ComboBox2.DataSource = DtSet.Tables("tblCustomer")
            ComboBox2.DisplayMember = "CustomerName"
    Desole de te deranger mais j'essaie de comprendre

  3. #3
    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 ...

  4. #4
    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 à 13h38.

  5. #5
    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
    Tu ne me déranges pas, je ne suis sur ce forum que pour aider, et seulement quand j'en ai le temps ...


    Quelques problèmes dans ton code (je mets en commentaires et fais quelques modif ...) :
    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
            Dim ChaineConnexion As String = "Provider=Microsoft.ACE.OLEDB.12.0;" & "Data Source = Database2.accdb"
     
            Dim DtSet As New DataSet()
     
            Dim UneTable1 As New DataTable
            Dim UneTable2 As New DataTable
            Dim UneTable3 As New DataTable
            Dim UneTable4 As New DataTable
     
             Dim cn1 As New OleDbDataAdapter("select distinct PN from tblToolRequisition Order by PN asc", ChaineConnexion)  ' tblPN
            Dim cn2 As New OleDbDataAdapter("select distinct CustomerName from tblToolRequisition Order by CustomerName asc", ChaineConnexion) ' tblCustomer
            Dim cn3 As New OleDbDataAdapter("select distinct ToolDRG from tblToolRequisition Order by ToolDRG asc", ChaineConnexion) ' tblTool
           Dim cn4 As New OleDbDataAdapter(""select * from tblToolRequisition"", ChaineConnexion)
     
      ''      Dim cn4 As New OleDbDataAdapter("select distinct RequistionNum from tblToolRequisition Order by RequistionNum asc", ChaineConnexion) ' ça n'a pas de sens de chercher sur l'ID, il est unique et est présenté par ordre dans le DataGrid
     
            cn1.Fill(UneTable1)
            cn2.Fill(UneTable2)
            cn3.Fill(UneTable3)
            cn4.Fill(UneTable4)
     
            DtSet.Tables.Add(UneTable1)
            DtSet.Tables.Add(UneTable2)
            DtSet.Tables.Add(UneTable3)
            DtSet.Tables.Add(UneTable4)
     
            DtSet.Tables(0).TableName = "tblPN"
            DtSet.Tables(1).TableName = "tblCustome"
            DtSet.Tables(2).TableName = "tblTool"
            DtSet.Tables(3).TableName = "tblToolRequisition"
     
      '      DtSet.Tables(DtSet.Tables.Count - 1).TableName = "tblCustomer"
     
       '     Dim AdapTContact1 As OleDb.OleDbDataAdapter
     
        '    UneTable1 = New DataTable
         '   UneTable2 = New DataTable
          '  UneTable3 = New DataTable
           ' UneTable4 = New DataTable
     
    '  cn1 = New OleDbDataAdapter("select * from tblToolRequisition", ChaineConnexion)
       '     cn1.Fill(UneTable1)
        '    DtSet.Tables.Add(UneTable1)
         '   DtSet.Tables(1).TableName = "tblToolRequisition"
     
            DataGridView1.DataSource = DtSet.Tables("tblToolRequisition")
     
            ComboBox1.DataSource = DtSet.Tables("tblPN")
            ComboBox1.DisplayMember = "PN"
     
            ComboBox2.DataSource = DtSet.Tables("tblCustomer")
            ComboBox2.DisplayMember = "CustomerName"
     
            ComboBox3.DataSource = DtSet.Tables("tblTool")
            ComboBox3.DisplayMember = "ToolDRG"
    Et après ça, tu peux récrire la procédure événementiel pour chaque Combo et produire à chaque fois la sélection des lignes du DataGrid.
    Quand c'est OK, il faudra chercher à n'écrire qu'une seule procédure pour tous les Combo de sélection ...

  6. #6
    Invité
    Invité(e)
    Par défaut
    Alors maintenant j'ai toutes mes combobox triees mais mon dgv n'affiche que la colonne "Customer"

    Je remets tout mon code au cas ou mais je vois pas pourquoi il affiche pas tout

    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
     Private Sub QuoteCosting_Load(sender As Object, e As EventArgs) Handles MyBase.Load
     
            Dim ChaineConnexion As String = "Provider=Microsoft.ACE.OLEDB.12.0;" & "Data Source = Database2.accdb"
     
            Dim DtSet As New DataSet()
     
            Dim UneTable1 As New DataTable
            Dim UneTable2 As New DataTable
            Dim UneTable3 As New DataTable
            Dim UneTable4 As New DataTable
            Dim UneTable5 As New DataTable
     
            Dim cn1 As New OleDbDataAdapter("select distinct PN from tblToolRequisition Order by PN asc", ChaineConnexion)  ' tblPN
            Dim cn2 As New OleDbDataAdapter("select distinct CustomerName from tblToolRequisition Order by CustomerName asc", ChaineConnexion) ' tblCustomer
            Dim cn3 As New OleDbDataAdapter("select distinct ToolDRG from tblToolRequisition Order by ToolDRG asc", ChaineConnexion) ' tblTool
            Dim cn4 As New OleDbDataAdapter("select distinct RequistionNum from tblToolRequisition Order by RequistionNum asc", ChaineConnexion) ' tblRequisition
            Dim cn5 As New OleDbDataAdapter("Select * from tblToolRequisition", ChaineConnexion)
     
            cn1.Fill(UneTable1)
            cn2.Fill(UneTable2)
            cn3.Fill(UneTable3)
            cn4.Fill(UneTable4)
            cn1.Fill(UneTable5)
     
            DtSet.Tables.Add(UneTable1)
            DtSet.Tables.Add(UneTable2)
            DtSet.Tables.Add(UneTable3)
            DtSet.Tables.Add(UneTable4)
            DtSet.Tables.Add(UneTable5)
     
            DtSet.Tables(0).TableName = "tblPN"
            DtSet.Tables(1).TableName = "tblCustomer"
            DtSet.Tables(2).TableName = "tblTool"
            DtSet.Tables(3).TableName = "tblRequisition"
            DtSet.Tables(4).TableName = "tblToolRequisition"
     
            DataGridView1.DataSource = DtSet.Tables("tblToolRequisition")
     
            ComboBox1.DataSource = DtSet.Tables("tblPN")
            ComboBox1.DisplayMember = "PN"
     
            ComboBox2.DataSource = DtSet.Tables("tblCustomer")
            ComboBox2.DisplayMember = "CustomerName"
     
            ComboBox3.DataSource = DtSet.Tables("tblTool")
            ComboBox3.DisplayMember = "ToolDRG"
     
            ComboBox4.DataSource = DtSet.Tables("tblRequisition")
            ComboBox4.DisplayMember = "RequistionNum"
     
            If ComboBox1.SelectedIndex Then
                Dim IndexColonne As Integer
                Dim IndexLigne As Integer
                DataGridView1.ClearSelection()
                IndexColonne = 4
                For IndexLigne = 0 To DataGridView1.Rows.Count - 1
                    Try
                        If DataGridView1.Item(IndexColonne, IndexLigne).Value = ComboBox1.Text Then
                            DataGridView1.Rows(IndexLigne).Selected = True
                        End If
                    Catch
                    End Try
                Next
            ElseIf ComboBox2.SelectedIndex Then
                Dim IndexColonne As Integer
                Dim IndexLigne As Integer
                DataGridView1.ClearSelection()
                IndexColonne = 3
                For IndexLigne = 0 To DataGridView1.Rows.Count - 1
                    Try
                        If DataGridView1.Item(IndexColonne, IndexLigne).Value = ComboBox2.Text Then
                            DataGridView1.Rows(IndexLigne).Selected = True
                        End If
                    Catch
                    End Try
                Next
            ElseIf ComboBox3.SelectedIndex Then
                Dim IndexColonne As Integer
                Dim IndexLigne As Integer
                DataGridView1.ClearSelection()
                IndexColonne = 6
                For IndexLigne = 0 To DataGridView1.Rows.Count - 1
                    Try
                        If DataGridView1.Item(IndexColonne, IndexLigne).Value = ComboBox3.Text Then
                            DataGridView1.Rows(IndexLigne).Selected = True
                        End If
                    Catch
                    End Try
                Next
            ElseIf ComboBox4.SelectedIndex Then
                Dim IndexColonne As Integer
                Dim IndexLigne As Integer
                DataGridView1.ClearSelection()
                IndexColonne = 1
                For IndexLigne = 0 To DataGridView1.Rows.Count - 1
                    Try
                        If DataGridView1.Item(IndexColonne, IndexLigne).Value = ComboBox4.Text Then
                            DataGridView1.Rows(IndexLigne).Selected = True
                        End If
                    Catch
                    End Try
                Next
     
            End If
     
        End Sub
    merci pour ton aide

  7. #7
    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 !!!

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

  9. #9
    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
    Voici, j'ai trouvé l'erreur ...
    Mais tu dois changer les sélections sur Combo d'endroit : une procédure événementielle par Combo (pour commencer). Ton code actuel, sur l'événement Load, ne s'exécutera pas lors des sélections sur combo.
    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
        Private Sub QuoteCosting_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
     
            Dim ChaineConnexion As String = "Provider=Microsoft.ACE.OLEDB.12.0;" & "Data Source = Database2.accdb"
     
            Dim DtSet As New DataSet()
     
            Dim UneTable1 As New DataTable
            Dim UneTable2 As New DataTable
            Dim UneTable3 As New DataTable
            Dim UneTable4 As New DataTable
            Dim UneTable5 As New DataTable
     
            Dim cn1 As New OleDbDataAdapter("select distinct PN from tblToolRequisition Order by PN asc", ChaineConnexion)  ' tblPN
            Dim cn2 As New OleDbDataAdapter("select distinct CustomerName from tblToolRequisition Order by CustomerName asc", ChaineConnexion) ' tblCustomer
            Dim cn3 As New OleDbDataAdapter("select distinct ToolDRG from tblToolRequisition Order by ToolDRG asc", ChaineConnexion) ' tblTool
            Dim cn4 As New OleDbDataAdapter("select distinct RequistionNum from tblToolRequisition Order by RequistionNum asc", ChaineConnexion) ' tblRequisition
            Dim cn5 As New OleDbDataAdapter("Select * from tblToolRequisition", ChaineConnexion)
     
            cn1.Fill(UneTable1)
            cn2.Fill(UneTable2)
            cn3.Fill(UneTable3)
            cn4.Fill(UneTable4)
            '' Voici l'erreur =========>    cn1.Fill(UneTable5)
            ' et le corrigé :
            cn5.Fill(UneTable5)  ' c'est peut-être moi ... les aléas des copier-coller  :D)))
     
            DtSet.Tables.Add(UneTable1)
            DtSet.Tables.Add(UneTable2)
            DtSet.Tables.Add(UneTable3)
            DtSet.Tables.Add(UneTable4)
            DtSet.Tables.Add(UneTable5)
     
            DtSet.Tables(0).TableName = "tblPN"
            DtSet.Tables(1).TableName = "tblCustomer"
            DtSet.Tables(2).TableName = "tblTool"
            DtSet.Tables(3).TableName = "tblRequisition"
            DtSet.Tables(4).TableName = "tblToolRequisition"
     
            DataGridView1.DataSource = DtSet.Tables("tblToolRequisition")
     
            ComboBox1.DataSource = DtSet.Tables("tblPN")
            ComboBox1.DisplayMember = "PN"
     
            ComboBox2.DataSource = DtSet.Tables("tblCustomer")
            ComboBox2.DisplayMember = "CustomerName"
     
            ComboBox3.DataSource = DtSet.Tables("tblTool")
            ComboBox3.DisplayMember = "ToolDRG"
     
            ComboBox4.DataSource = DtSet.Tables("tblRequisition")
            ComboBox4.DisplayMember = "RequistionNum"
     
     
     
            '''**************Pour tout ce qui suit, il faut écrire autant de procédure événmentielle que de Combo
     
            '''   Private Sub Combo..._SelectedIndexChanged(ByVal sender As Object ...
     
            'If ComboBox1.SelectedIndex Then
            '    Dim IndexColonne As Integer
            '    Dim IndexLigne As Integer
            '    DataGridView1.ClearSelection()
            '    IndexColonne = 4
            '    For IndexLigne = 0 To DataGridView1.Rows.Count - 1
            '        Try
            '            If DataGridView1.Item(IndexColonne, IndexLigne).Value = ComboBox1.Text Then
            '                DataGridView1.Rows(IndexLigne).Selected = True
            '            End If
            '        Catch
            '        End Try
            '    Next
            'ElseIf ComboBox2.SelectedIndex Then
            '    Dim IndexColonne As Integer
            '    Dim IndexLigne As Integer
            '    DataGridView1.ClearSelection()
            '    IndexColonne = 3
            '    For IndexLigne = 0 To DataGridView1.Rows.Count - 1
            '        Try
            '            If DataGridView1.Item(IndexColonne, IndexLigne).Value = ComboBox2.Text Then
            '                DataGridView1.Rows(IndexLigne).Selected = True
            '            End If
            '        Catch
            '        End Try
            '    Next
            'ElseIf ComboBox3.SelectedIndex Then
            '    Dim IndexColonne As Integer
            '    Dim IndexLigne As Integer
            '    DataGridView1.ClearSelection()
            '    IndexColonne = 6
            '    For IndexLigne = 0 To DataGridView1.Rows.Count - 1
            '        Try
            '            If DataGridView1.Item(IndexColonne, IndexLigne).Value = ComboBox3.Text Then
            '                DataGridView1.Rows(IndexLigne).Selected = True
            '            End If
            '        Catch
            '        End Try
            '    Next
            'ElseIf ComboBox4.SelectedIndex Then
            '    Dim IndexColonne As Integer
            '    Dim IndexLigne As Integer
            '    DataGridView1.ClearSelection()
            '    IndexColonne = 1
            '    For IndexLigne = 0 To DataGridView1.Rows.Count - 1
            '        Try
            '            If DataGridView1.Item(IndexColonne, IndexLigne).Value = ComboBox4.Text Then
            '                DataGridView1.Rows(IndexLigne).Selected = True
            '            End If
            '        Catch
            '        End Try
            '    Next
     
            'End If
     
        End Sub

  10. #10
    Invité
    Invité(e)
    Par défaut
    ah non dsl c'est mon erreur
    du coup pour les procedures evementielles je met les 4 if dans chaque ? pcq quand j'avais essayé un par un ca ne marchait, seul le combobox1 etait effectue

  11. #11
    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 ...

  12. #12
    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 : 689
Taille : 8,0 Ko

  13. #13
    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
    Si je me souviens bien, la procédure événementielle pour le ComboBox1 est :
    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_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
            Dim IndexColonne As Integer
            Dim IndexLigne As Integer
            If TemoinDBOuverte Then
                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 If
        End Sub
    Tu dois refaire la "même" procédure pour chacun des Combos, en adaptant le nom de la colonne pour l’obtention de l'IndexColonne : IndexColonne = DataGridView1.Columns("PN").Index

    Quand elles fonctionnent toutes, je veux bien te les grouper en une seule procédure ...

  14. #14
    Invité
    Invité(e)
    Par défaut
    J'ai utilise l'autre version pour chaque combobox
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
        Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged
            Dim IndexColonne As Integer
            Dim IndexLigne As Integer
            DataGridView1.ClearSelection()
            IndexColonne = 4
            For IndexLigne = 0 To DataGridView1.Rows.Count - 1
                Try
                    If DataGridView1.Item(IndexColonne, IndexLigne).Value = ComboBox1.Text Then
                        DataGridView1.Rows(IndexLigne).Selected = True
                    End If
                Catch
                End Try
            Next
        End Sub
    Sur celle que tu m'as donné juste avant il y a une erreur.
    le probleme c'est que quand je selectionne dans les combobox, il ne selectionne aucune ligne

  15. #15
    Invité
    Invité(e)
    Par défaut
    Dsl en fait ca marche

    J'aurais jsute une derniere question concernant ces combobox: Est il possible de supprimer les lignes non selectionne? Par exemple, si je choisis le client 3 dans la combobox toutes les lignes qui ne concernent pas ce client s'efface et revienne si je choisis un autre client
    J'ai regarde sur internet mais je trouve que des solutions qui supprime l'element qui est selectionné dans le combobox, l'inverse de ce que je veux
    Dernière modification par Invité ; 14/03/2019 à 14h34.

  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
    Finalement, est-ce la version (ci-dessous) avec les noms de colonnes qui fonctionne ?
    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_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
            Dim IndexColonne As Integer
            Dim IndexLigne As Integer
            If TemoinDBOuverte Then
                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 If
        End Sub
    Pour ce qui d'enlever les lignes et les remettre, ça revient à modifier la requête d’alimentation du DataGrigView (exemple pour les PN) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     ' Attention de ne pas oublier ' et " ...
    "select * from tblToolRequisition WHERE (PN = '" & ComboBox.Text & "')"
    Mais il faut alors ré-initialiser le DataGridView1.DatdaSource, si je me souviens bien ...
    Attention qu'avec ce système, à partir de la première sélection, tu ne montres plus jamais l'entièreté des données ...

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 3 PremièrePremière 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, 22h38
  2. Afficher des images depuis une table dans combobox
    Par sihammaster dans le forum VB.NET
    Réponses: 2
    Dernier message: 13/04/2010, 19h51
  3. DataGridView avec comboBox sur les lignes
    Par gentelmand dans le forum Windows Forms
    Réponses: 1
    Dernier message: 09/03/2009, 13h46
  4. Réponses: 13
    Dernier message: 14/04/2008, 14h30
  5. afficher une image depuis un combobox
    Par ghosthacker dans le forum MFC
    Réponses: 5
    Dernier message: 11/06/2007, 10h35

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