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 :

Comment Remplir 3 ComboBox


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    développeur VB
    Inscrit en
    Avril 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : développeur VB

    Informations forums :
    Inscription : Avril 2011
    Messages : 33
    Par défaut Comment Remplir 3 ComboBox
    Salut tous

    J'ai un table Directions qui contient CodeDirection (clé primaire) et NomDirection.
    Chaque Direction (codée sur 2 chiffres) possède des SousDirections (codée sur 4 chiffres dont les 2 premiers indiquent la Direction associé), et chaque SousDierction possède des Services (codee sur 6 chiffres, dont les 4 premiers sont celles des SousDirections associé et les 2 derniers sont celles des Services).
    J'ai rempli mon 1 ComboBox (Directions)

    Ma question: comment remplir le 2 ComboBox (SousDirections qui appartiennent à la Direction sélectionner dans le 1 ComboBox ), puis remplir le 3 ComboBox (Services qui appartiennent à la SousDirection sélectionner dans le 2 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
    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
     Public Sub CmbDir()
            Cn.Open()
            If Cn.State = ConnectionState.Open Then
                Cmd.CommandType = CommandType.Text
                Cmd.CommandText = "Select NomDirections from Directions where CodeDirections = Mid(CodeDirections,1,2) Order By CodeDirections"
                Cmd.Connection = Cn
                Dr = Cmd.ExecuteReader()
                If Dr.HasRows Then
                    While Dr.Read
                        FrmAjoutPers.CmbDirections.Items.Add(Dr(0))
                    End While
                    Dr.Close()
                    Cn.Close()
                Else
                    Dr.Close()
                    Cn.Close()
                    MsgBox("Pas de Direction Trouver", 0 + 16, " Erreur")
                End If
            Else
                MsgBox("Erreur de connexion à la Base", 0 + 16, "Erreur")
            End If
        End Sub
     
    'ComboBox Direction a été remplit avec Succès
     
        Public Sub CmbSousDir()
            Cn.Open()
            If Cn1.State = ConnectionState.Open Then
                Cmd.CommandType = CommandType.Text
                Cmd.CommandText = "SELECT NomDirections FROM Directions WHERE (Val(CodeDirections)>100 And Val(CodeDirections)<10000 and mid(CodeDirections,1,2)='" & FrmAjoutPers.CmbDirections.SelectedValue & "');"
                Cmd.Connection = Cn
                Dr = Cmd.ExecuteReader()
                If Dr.HasRows Then
                    While Dr.Read
                        FrmAjoutPers.CmbSousDirections.Items.Add(Dr(0))
                    End While
                    Dr.Close()
                    Cn.Close()
                Else
                    Dr.Close()
                    Cn.Close()
                    MsgBox("Pas de Sous Direction Trouver", 0 + 16, " Erreur")
                End If
            Else
                MsgBox("Erreur de connexion à la Base", 0 + 16, "Erreur")
     
            End If
    'ComboBox Sous Direction est Toujours Vide " MsgBox("Pas de Sous Direction Trouver", 0 + 16, " Erreur")"
    Je sais que je fais des énormes bêtises. Pour apprendre, il faut se sacrifier. C'est pour cela je travail le jour et j’étudie tard la nuit.

    Merci à tous

  2. #2
    Membre Expert


    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 970
    Par défaut
    Ce que je te conseille :

    - Tu charges ta table dans un DataSet via un DataAdapter.Fill :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Cmd.CommandType = CommandType.Text
    Cmd.CommandText = "Select * from Directions"
     
    dim da as new DataAdapter 
    da.SelectCommand = cmd 
     
    da.fill(ds,"Directions")
    - Tu crée un Dataview par ComboBox que tu lies à la combobox correspondante via sa propriété Datasource. Pour créer un DataView :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
            Dim dv = New DataView(ds.Table("Directions"))
     
            ComboBox1.DataSource = dv
            ComboBox1.DisplayMember = NomDirections
            ComboBox1.ValueMember = CodeDirections
    A partir de la ta combobox comprend tous les enregistrement de da table Directions

    - Un Dataview possède une propriété RowFilter qui permet d'exécuter sur le jeux de données du Dataview l'équivalent d'un Where en Sql.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    dv.RowFilter = "CodeDirections = " +  Mid(CodeDirections,1,2)
    Pour le tri :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    dv.Sort = "CodeDirections"
    Ceci est du code tapé à la volée pour te donner un exemple et une marche à suivre, il ne compile peut-être pas complètement, mais cela te donne une piste à suivre.
    Articles sur les technologies .NET

    Une réponse vous a aidé ? utilisez le bouton

    Votre problème est résolu ? utilisez le bouton

  3. #3
    Membre averti
    Homme Profil pro
    développeur VB
    Inscrit en
    Avril 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : développeur VB

    Informations forums :
    Inscription : Avril 2011
    Messages : 33
    Par défaut
    Salut

    Merci mon frère InfoSam, j'ai essayé mais çà n'a pas marcher.

    encore merci parce que tu a fais un effort pour m'aider.

    De ma part je cherche encore et j'accepte tout sorte d'aide.

    Merci pour tous

  4. #4
    Modérateur
    Avatar de Sankasssss
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Par défaut
    Citation Envoyé par MoMeBe Voir le message
    j'ai essayé mais çà n'a pas marcher.
    Qu'est ce qui n'a pas marché? Des messages d'erreurs? Si oui quelle est la partie de code concernée?

    infosam76 n'est pas devin (enfin je pense ^^) et il a bien dit :
    Ceci est du code tapé à la volée pour te donner un exemple et une marche à suivre, il ne compile peut-être pas complètement, mais cela te donne une piste à suivre.
    Il y a en effet quelque petit problème du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            Dim dv = New DataView(ds.Table("Directions"))
     
            ComboBox1.DataSource = dv
            ComboBox1.DisplayMember = "NomDirections" ' Il manquait les quotes
            ComboBox1.ValueMember = "CodeDirections" ' Il manquait les quotes
    Rien de bien grave à régler...

  5. #5
    Membre Expert


    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 970
    Par défaut
    Effectivement j'ai donné le fil directeur sans trop faire attention à la syntaxe et sans un visual studio ouvert je l'ai bien précisé
    Articles sur les technologies .NET

    Une réponse vous a aidé ? utilisez le bouton

    Votre problème est résolu ? utilisez le bouton

  6. #6
    Membre Expert


    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 970
    Par défaut
    Voici un exemple plus concret, fonctionnel et assez proche de ce que tu veux réaliser.

    J'ai créé mon Dataset à partir du code en respectant plus ou moins la nomenclature des codes que tu as l'air d'utiliser (comme l'a précisé Sankasssss, j'ai oublié ma boule de cristal ;-) ).

    Donc la création de mon Dataset avec les données :

    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
     
    Private ds As DataSet
     
    ...
     
    ds = New DataSet
     
    ' Ajout de la table 
    ds.Tables.Add("DIRECTIONS")
     
    ' Ajout des colonnes 
    ' ------------------
    AddColl("CODE", System.Type.GetType("System.String"), True)
    AddColl("LIBELLE", System.Type.GetType("System.String"))
     
    ' Ajout de quelques lignes
    AddRow("01", "Lib01")
    AddRow("0101", "Lib01-01")
    AddRow("0102", "Lib01-02")
    AddRow("02", "Lib02")
    AddRow("0201", "Lib02-01")
    Pour toi rien d’intéressant dans cette partie je pense vu que tu pars d'une DB.
    Tu peux toutefois constater que comme expliqué dans mon poste précédent, je n'ai bien qu'une table dans mon DataSet avec toutes les données.

    Ensuite je vais créer un DataView par ComboBox (dans le cadre de mon exemple je n'ai créé que 2 Combo) et les lier avec leurs ComboBox respectives :

    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
     
    ' Initialisation de la combobox direction
    dvDirection = New DataView(ds.Tables("DIRECTIONS"))
     
    dvDirection.RowFilter = "len(CODE) = 2"
    cboDirection.DataSource = dvDirection
    cboDirection.DisplayMember = "LIBELLE"
    cboDirection.ValueMember = "CODE"
     
    ' Initialisation de la combobox sous-direction
    dvSousDirection = New DataView(ds.Tables("DIRECTIONS"))
     
    cboSousDirection.DataSource = dvSousDirection
    cboSousDirection.DisplayMember = "LIBELLE"
    cboSousDirection.ValueMember = "CODE"
    Tu remarqueras que pour la ComboBox des sous-catégories je n'ai pas spécifié de RowFilter sur le DataView correspondant

    Je modifie celui-ci dans l'événement SelectedValueChanged de ma ComboBox contenant les directions :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    dvSousDirection.RowFilter = "SUBSTRING(CODE,1,2) = " + cboDirection.SelectedValue + " and len(code) = 4"
    Vu que mon DataView dvSousDirection est lié à la ComboBox affichant les sous-directions, elle est modifiée automatiquement en fonction du nouveau filtre.

    Donc en gros rien de compliqué. Voici le code complet de l'exemple :

    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
     
    Imports System.Data
     
    Public Class Form1
    Private bInit As Boolean
    Private ds As DataSet
    Private dvDirection As DataView
    Private dvSousDirection As DataView
     
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    	ds = New DataSet
     
    	bInit = True
    	' Ajout de la table 
    	ds.Tables.Add("DIRECTIONS")
     
    	' Ajout des colonnes 
    	' ------------------
    	AddColl("CODE", System.Type.GetType("System.String"), True)
    	AddColl("LIBELLE", System.Type.GetType("System.String"))
     
    	' Ajout de quelques lignes
    	AddRow("01", "Lib01")
    	AddRow("0101", "Lib01-01")
    	AddRow("0102", "Lib01-02")
    	AddRow("02", "Lib02")
    	AddRow("0201", "Lib02-01")
     
    	' Initialisation de la combobox direction
    	dvDirection = New DataView(ds.Tables("DIRECTIONS"))
    	dvDirection.RowFilter = "len(CODE) = 2"
    	cboDirection.DataSource = dvDirection
    	cboDirection.DisplayMember = "LIBELLE"
    	cboDirection.ValueMember = "CODE"
     
    	' Initialisation de la combobox sous-direction
    	dvSousDirection = New DataView(ds.Tables("DIRECTIONS"))
     
    	cboSousDirection.DataSource = dvSousDirection
    	cboSousDirection.DisplayMember = "LIBELLE"
    	cboSousDirection.ValueMember = "CODE"
     
    	bInit = False
     
    	If dvDirection.Count > 0 Then
    		cboDirection.SelectedIndex = 0
    		cboDirection_SelectedValueChanged(Nothing, Nothing)
    	End If
     
    End Sub
     
    ' Fonction pour ajouter une colonne 
    Private Sub AddColl(ByVal pColumnName As String, ByVal pType As System.Type, Optional ByVal pUnique As Boolean = False)
    	Dim col As New DataColumn
     
    	With col
    		.DataType = pType
    		.ColumnName = pColumnName
    		.Unique = pUnique
    	End With
     
    	ds.Tables("DIRECTIONS").Columns.Add(col)
    End Sub
     
    ' Ajout d'une ligne
    Private Sub AddRow(ByVal pCode As String, ByVal pLibelle As String)
    	Dim newRow As DataRow
     
    	newRow = ds.Tables("DIRECTIONS").NewRow
    	newRow("CODE") = pCode
    	newRow("LIBELLE") = pLibelle
     
    	ds.Tables("DIRECTIONS").Rows.Add(newRow)
    End Sub
     
    ' Changement de sélection dans la combobox Direction
    Private Sub cboDirection_SelectedValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cboDirection.SelectedValueChanged
    	If Not bInit Then
    		dvSousDirection.RowFilter = "SUBSTRING(CODE,1,2) = " + cboDirection.SelectedValue + " and len(code) = 4"
    	End If
    End Sub
    End Class
    J'ai également joint une archive avec l'application complète. J'espère que tu arriveras à te débloquer avec cet exemple. Si tu as d'autres questions nous sommes la.
    Fichiers attachés Fichiers attachés
    Articles sur les technologies .NET

    Une réponse vous a aidé ? utilisez le bouton

    Votre problème est résolu ? utilisez le bouton

Discussions similaires

  1. comment remplir une combobox ?
    Par coax81 dans le forum GTK+ avec C & C++
    Réponses: 3
    Dernier message: 26/03/2007, 10h55
  2. [VBA-E] Comment remplir une ComboBox ?
    Par yaya54 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 07/03/2006, 09h03
  3. Réponses: 6
    Dernier message: 09/12/2005, 11h14
  4. Comment remplir un ComboBox avec le nom des feuilles Excel ?
    Par libracom dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 27/06/2005, 15h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo