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 :

Cascading 3 ComboBox


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de MADA BLACK
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Décembre 2015
    Messages
    268
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Décembre 2015
    Messages : 268
    Par défaut Cascading 3 ComboBox
    Bonjour Tout le monde
    Svp .. j'ai vraiment besoin d'aide pour finir mon fichier
    J'ai 3 Tables :
    TBL_PAYS (PAYS_Id Type Numerique) (PAYS_Name Type Texte)
    TBL_VILLE (VILLE_Id Type Numerique) (VILLE_Name Type Texte) (VILLE_Numero_Pays Type Numerique)
    TBL_VILLAGE (VILLAGE_Id Type Numerique) (VILLAGE_Name Type Texte) (VILLAGE_Numero_Ville Type Numerique)
    ComboBox1 est alimentee par TBL_PAYS
    ComboBox2 est alimentee par TBL_VILLE
    ComboBox3 est alimentee par TBL_VILLAGE
    Je fais mon choix du pays avec ComboBox1 .. ma ComboBox2 sera alimentee par les villes deja choisit dans ComboBox1
    Je fais mon choix du Ville avec ComboBox2 .. ma ComboBox3 sera alimentee par les villages deja choisit dans ComboBox2
    Simplement avec deux ComboBox ..1 et 2 .. pays et ville .. ca fonctionne tres bien mais lorsque j'ajoute ma troisieme ComboBox3 .. des que je fais mon choix avec Combobox1 .. j'aurai ce message d'erreur (Additional information: Argument 'Expression' cannot be converted to type 'DataRowView'.).
    Dans Cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim da As New OleDbDataAdapter("SELECT * From TBL_VILLAGE Where VILLAGE_Numero_Ville=" & Val(ComboBox2.SelectedValue), con)
    Voici tout le code du Form1 :
    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
    Imports System.Data
    Imports System.Data.OleDb
    Public Class Form1
        Dim con As New OleDbConnection
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            con = New OleDbConnection
            con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|Datadirectory|\CASCADING.mdb"
            con.Open()
            Dim da As New OleDbDataAdapter("SELECT * From TBL_PAYS", con)
            Dim ds As New DataSet
            da.Fill(ds, "TBL_PAYS")
            ComboBox1.DisplayMember = "PAYS_Name"
            ComboBox1.ValueMember = "PAYS_Id"
            ComboBox1.DataSource = ds.Tables("TBL_PAYS")
            ComboBox1.Refresh()
        End Sub
        Protected Sub Combobox1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
            Dim da As New OleDbDataAdapter("SELECT * From TBL_VILLE Where VILLE_Numero_Pays=" & Val(ComboBox1.SelectedValue), con)
            Dim ds As New DataSet
            da.Fill(ds, "TBL_VILLE")
            ComboBox2.DataSource = ds.Tables("TBL_VILLE")
            ComboBox2.DisplayMember = "VILLE_Name"
        End Sub
        Private Sub ComboBox2_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox2.SelectedIndexChanged
            Dim da As New OleDbDataAdapter("SELECT * From TBL_VILLAGE Where VILLAGE_Numero_Ville=" & Val(ComboBox2.SelectedValue), con)
            Dim ds As New DataSet
            da.Fill(ds, "TBL_VILLAGE")
            ComboBox3.DataSource = ds.Tables("TBL_VILLAGE")
            ComboBox3.DisplayMember = "VILLAGE_Name"
        End Sub
    End Class
    Merci beaucoup d'avance pour l'aide
    Cordialement
    MADA

  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
    Salut Mada,


    Je t'ai fait un message privé pour que tu envoies la DB.

    En attendant, peux-tu tester avec l'ajout de cette ligne ComboBox2.ValueMember = "VILLE_Id" ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
        Protected Sub Combobox1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
            Dim da As New OleDbDataAdapter("SELECT * From TBL_VILLE Where VILLE_Numero_Pays=" & Val(ComboBox1.SelectedValue), con)
            Dim ds As New DataSet
            da.Fill(ds, "TBL_VILLE")
            ComboBox2.DataSource = ds.Tables("TBL_VILLE")
            ComboBox2.DisplayMember = "VILLE_Name"
             ComboBox2.ValueMember = "VILLE_Id"
        End Sub

  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
    Ne m'envoie pas ta DB, j'en ai fait une.

    Le code suivant devrait être meilleur. Il y a un problème du fait que tout les Combo sont manipulés pendant l'initialisation du Form et des événements SelectedIndexChanged sont produits, alors que les Combos ne sont pas encore remplis. C'est pourquoi tes codes ne fonctionnent pas, on ne peut chercher les villes sans avoir un pays, ni des villages sans avoir une ville.

    Mais à moins d'être contraint à cette programmation, une seule jointure pourrait alimenter les 3 Combo et les tenir synchro automatiquement.
    Si j'ai un peu de temps, je fais un exemple.

    En attendant, voici ton code amélioré.

    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
     
    Imports System.Data
    Imports System.Data.OleDb
    Public Class Form1
     
        Dim ChargementPaysOK As Boolean = False
        Dim ChargementVilleOK As Boolean = False
     
        Dim con As New OleDbConnection
        Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
     
            con = New OleDbConnection
            con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|Datadirectory|\CASCADING.mdb"
           ' con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Tmp\MadaDBVillages\DBPays.mdb"
            con.Open()
            Dim da As New OleDbDataAdapter("SELECT * From TBL_PAYS", con)
            Dim ds As New DataSet
            da.Fill(ds, "TBL_PAYS")
            ComboBox1.DataSource = ds.Tables("TBL_PAYS")
            ComboBox1.DisplayMember = "PAYS_Name"
            ComboBox1.ValueMember = "PAYS_Id"
     
            ChargementPaysOK = True
        End Sub
        Protected Sub Combobox1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
     
            If Not ChargementPaysOK Then Exit Sub
     
            Dim da As New OleDbDataAdapter("SELECT * From TBL_VILLE Where VILLE_Numero_Pays=" & Val(ComboBox1.SelectedValue), con)
            Dim ds As New DataSet
            da.Fill(ds, "TBL_VILLE")
            ComboBox2.DataSource = ds.Tables("TBL_VILLE")
            ComboBox2.DisplayMember = "VILLE_Name"
            ComboBox2.ValueMember = "VILLE_Id"   ' Nécessaire pour Val(ComboBox2.SelectedValue) dans ComboBox2_SelectedIndexChanged
     
            ChargementVilleOK = True
        End Sub
        Private Sub ComboBox2_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Handles ComboBox2.SelectedIndexChanged
     
            If Not ChargementVilleOK Then Exit Sub
     
            Dim da As New OleDbDataAdapter("SELECT * From TBL_VILLAGE Where VILLAGE_Numero_Ville=" & Val(ComboBox2.SelectedValue), con)
            Dim ds As New DataSet
            da.Fill(ds, "TBL_VILLAGE")
            ComboBox3.DataSource = ds.Tables("TBL_VILLAGE")
            ComboBox3.DisplayMember = "VILLAGE_Name"
     
        End Sub
    End Class

  4. #4
    Membre éclairé Avatar de MADA BLACK
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Décembre 2015
    Messages
    268
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Décembre 2015
    Messages : 268
    Par défaut
    Bonsoir Maitre
    Bonsoir PHIL ROB
    Je suis tres desole .. j'etais entrain d'essayer de chercher une solution .. j'ai pas fais attention au message .. mes excuses
    C'est parfait le dernier code
    Merci pour l'impeccable et ideale solution et surtout compréhensible
    Ca fonctionne comme je veux
    Merci pour tous
    (une seule jointure pourrait alimenter les 3 Combo et les tenir synchro automatiquement) .. J'attends avec impatience votre exemple
    Amicalement
    MADA

  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
    Mais j'ai été un peu vite pour parler d'une seule jointure ...

    Voila, une version avec une seule jointure : MadaDBVillages.zip. Les 3 ComboBox sont effectivement synchronisées mais l'affichage ne te conviendra sûrement pas.

    Je tâchera ide faire mieux une autre fois ...

  6. #6
    Membre éclairé Avatar de MADA BLACK
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Décembre 2015
    Messages
    268
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Décembre 2015
    Messages : 268
    Par défaut
    Bonjour maitre
    Merci infiniment pour cet extra exemple
    Plus court .. plus efficace .. je vais essayer de comprendre cette jointure
    Merci encore pour l'aide
    Cordialement
    MADA

  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
    Bonjour Mada,

    Je t'avais envoyé une autre version hier soir mais j'ai du faire une mauvaise manoeuvre, elle n'est pas passée

    Alors, je te la renvoie ici. Cette version fonctionne exactement comme la tienne mais dispense d'utiliser la variables booléenne ChargementOK.
    Voici tout le code du Form :
    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
     
    Imports System.Data
    Imports System.Data.OleDb
    Public Class Form1
     
        Dim con As New OleDbConnection
        Dim MiAdapter As OleDbDataAdapter
     
        Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
     
            ''  con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|Datadirectory|\CASCADING.mdb"
            con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & CurDir() & "\DBPays.mdb"
     
            ChargePays()
            ChargeVille()
            ChargeVillage()
     
        End Sub
     
        Private Sub ChargePays()
            Dim SQL As String = "SELECT * FROM TBL_Pays"
            Dim da As New OleDbDataAdapter(SQL, con)
            Dim ds As New DataSet
            da.Fill(ds, "LesPays")
            ComboBox1.DataSource = ds.Tables("LesPays")
            ComboBox1.DisplayMember = "Pays_Name"
            ComboBox1.ValueMember = "Pays_ID"
        End Sub
     
        Private Sub ChargeVille()
            Try
                Dim SQL As String = "SELECT * FROM TBL_Ville WHERE VILLE_Numero_Pays= " & Val(ComboBox1.SelectedValue)
                Dim da As New OleDbDataAdapter(SQL, con)
                Dim ds As New DataSet
                da.Fill(ds, "LesVILLES")
                ComboBox2.DataSource = ds.Tables("LesVILLES")
                ComboBox2.DisplayMember = "VILLE_Name"
                ComboBox2.ValueMember = "VILLE_ID"
            Catch
            End Try
        End Sub
     
        Private Sub ChargeVillage()
            Try
                Dim SQL As String = "SELECT * FROM TBL_Village WHERE VILLAGE_Numero_VILLE= " & Val(ComboBox2.SelectedValue)
                Dim da As New OleDbDataAdapter(SQL, con)
                Dim ds As New DataSet
                da.Fill(ds, "LesVILLAGES")
                ComboBox3.DataSource = ds.Tables("LesVILLAGES")
                ComboBox3.DisplayMember = "VILLAGE_Name"
                ComboBox3.ValueMember = "VILLAGE_ID"
            Catch
            End Try
        End Sub
     
        Private Sub Combobox1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
            ChargeVille()
            ChargeVillage()
        End Sub
     
        Private Sub ComboBox2_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Handles ComboBox2.SelectedIndexChanged
            ChargeVillage()
        End Sub
    End Class
    Très bonne journée,


  8. #8
    Membre éclairé Avatar de MADA BLACK
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Décembre 2015
    Messages
    268
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Décembre 2015
    Messages : 268
    Par défaut
    Salut maitre
    Oui .. effectivement cette dernière version est la meilleur .. je vais l'utiliser
    Très très gentil de votre part
    Merci pour tous .. et surtout merci pour votre précieux temps
    Très bonne journée
    Amicalement
    MADA

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

Discussions similaires

  1. [Débutant] Cascade deux combobox à partir de deux tableaux SQL
    Par bt-med dans le forum VB.NET
    Réponses: 29
    Dernier message: 05/08/2015, 13h18
  2. Filtrage en cascade de comboboxs en WPF XAML .NET
    Par Masamunai dans le forum Windows Presentation Foundation
    Réponses: 9
    Dernier message: 27/05/2011, 16h21
  3. [XL-2003] Textbox se remplissant avec une cascade de combobox
    Par avenir80 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 18/12/2010, 17h54
  4. 3 Combobox (Listbox) en cascade la 3éme colonne ne s'affiche pas
    Par minogttao dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 08/11/2006, 22h44
  5. [VBA-E] ComboBox en cascade avec correspondance dans matrice
    Par ViperSpy dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 21/06/2006, 17h01

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