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

Windows Forms Discussion :

Remplir un combobox qui n'existe pas encore


Sujet :

Windows Forms

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2013
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 55
    Points : 25
    Points
    25
    Par défaut Remplir un combobox qui n'existe pas encore
    Bonjour,

    J'explique un peu mon programme.
    J'ai une bdd Access (mdb) et je voudrais que via mon interface l'utilisateur puisse ajouter un enregistrement dans une table.

    Comme je ne connais pas en avance les tables, je créé dynamiquement les combobox et les labels comme suit

    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 x As Integer = Form1.tablegridview.Columns.Count - 1
            Dim tableau(1, x) As String
            For i = 0 To x
                tableau(0, i) = i + 1
                tableau(1, i) = Form1.tablegridview.Columns(i).Name.ToString
            Next
     
            Dim Top As Integer = 100
            Dim Left As Integer = 100
            Dim Width As Integer = 2500
            Dim Height As Integer = 275
            Dim NumeroCBox As Integer = 1
            Dim Cbox As ComboBox
            Dim label_dyn As Label
     
            For i = 1 To x + 1
                Cbox = New ComboBox
                label_dyn = New Label
     
                With label_dyn
                    .Name = "label" & i
                    .Visible = True
                    .Top = Top - 15         'Definit la distance entre le bord haut de la fenetre et le bord du conteneur 
                    .Left = Left            'Definit la distance entre le bord gauche de la fenetre et le bord du conteneur
                    .AutoSize = True
                    .Text = tableau(1, i - 1)
                End With
                With Cbox
                    .Name = "Cbox_" & tableau(1, i - 1)
                    .Visible = True
                    .Top = Top          'Definit la distance entre le bord haut de la fenetre et le bord du conteneur 
                    .Left = Left        'Definit la distance entre le bord gauche de la fenetre et le bord du conteneur 
                    .Width = Width      'Definit la largeur de l'objet 
                    .Height = Height    'Definit la hauteur de l'objet 
                    .Size = New Size(200, 200)
                End With
     
                Me.Controls.Add(Cbox)
                Me.Controls.Add(label_dyn)
                Top = Top + 50
                NumeroCBox = NumeroCBox + 1
     
                If (i > 0) And (i Mod 8 = 0) Then
                    Top = 100
                    Left = Left + 250
                End If
            Next
    Jusque la tout fonctionne comme souhaité. Mais je voudrais pouvoir remplir les combobox nouvellement créées et la je ne vois pas comment m'y prendre.

    Quand je connaissais le nombre de combobox et leur noms je faisais comme ça

    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
     
    Dim objcmd As OleDbCommand
            Dim objDataAdapter As OleDbDataAdapter
            Dim objCB As OleDbCommandBuilder
            Dim objDataSet As New DataSet
            Dim objDataTable As New DataTable
                If con.State = ConnectionState.Closed Then
                    con.Open()
                End If
                chaine = "SELECT DISTINCT Author FROM [" & Cbox_nametbl.Text & "]"      
                objcmd = New OleDbCommand(chaine)
                objDataAdapter = New OleDbDataAdapter(objcmd)
                objcmd.Connection = con
                objCB = New OleDbCommandBuilder(objDataAdapter)
                objDataAdapter.Fill(objDataSet, "[" & Cbox_nametbl.Text & "]")
                objDataTable = objDataSet.Tables("[" & Cbox_nametbl.Text & "]")
                Creation_composant.Cbox_autor.DisplayMember = "Author"
                Creation_composant.Cbox_autor.ValueMember = "Author"
                Creation_composant.Cbox_autor.DataSource = objDataSet.Tables("[" & Cbox_nametbl.Text & "]")
                con.Close()
    Mais ici donc je connaissais le nom de ma combobox et elle existait déjà
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     Creation_composant.Cbox_autor.DisplayMember = "Author"
                Creation_composant.Cbox_autor.ValueMember = "Author"
                Creation_composant.Cbox_autor.DataSource = objDataSet.Tables("[" & Cbox_nametbl.Text & "]")
    Mais aujourd'hui je ne peux plus faire comme ça et je suis perdu dans le brouillard. Je ne vois pas comment faire. Des idées ?

  2. #2
    Membre confirmé

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2011
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 46
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 244
    Points : 574
    Points
    574
    Par défaut
    Je pense qu'en nommant chaque contrôle et en faisant une recherche avec la méthode Me.Controls.Find(...), cela devrait marcher.
    "C'est tellement merdique que toute modification est une amélioration !"

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    665
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 665
    Points : 1 161
    Points
    1 161
    Par défaut
    Bonsoir,
    lors de la création du Cbox et l'ajout au formulaire, vous pouvez l'alimenter ou le peupler :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
                With Cbox
                    .Name = "Cbox_" & tableau(1, i - 1)
                    .Visible = True
                    .Top = Top          'Definit la distance entre le bord haut de la fenetre et le bord du conteneur 
                    .Left = Left        'Definit la distance entre le bord gauche de la fenetre et le bord du conteneur 
                    .Width = Width      'Definit la largeur de l'objet 
                    .Height = Height    'Definit la hauteur de l'objet 
                    .Size = New Size(200, 200)
                End With
     
                Me.Controls.Add(Cbox)
                PopulateCbox(Cbox, tableau(1, i - 1))
    PopulateCbox retourne la source avec les critères adéquats :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        Private Sub PopulateCbox(ByVal cBox As ComboBox, ByVal nameCol As String)
     
            cBox.DisplayMember = nameCol
            cBox.ValueMember = nameCol
            cBox.DataSource = Me.DataGridView1.DataSource    'objDataSet.Tables("[" & Cbox_nametbl.Text & "]")
     
        End Sub
    Bon à voir avec votre application.

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2013
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 55
    Points : 25
    Points
    25
    Par défaut
    Merci pour vos réponses.

    J'ai essayé la méthode du Me.Controls.Find mais je ne trouve pas ce que je veux, ou alors je n'arrive pas à l'utiliser.

    C'est vrai que je n'avais pas pensé à remplir aussitôt les combobox ... Du coup j'ai essayé et ça fonctionne nikel

    Et après j'ai un autre problème, plus ou moins le même. Il faudrait que je récupère les valeurs dans les combobox pour les insérer dans une requête sql.
    J'ai pensé à faire un for each sur touts mon combobox pour mettre les valeurs dans un tableau et après je réutilise mais quand je vais une
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for each ctrl in me.controls
    J'ai touts les contrôles et moi je voudrais que les combobox ...
    On peut tester si le contrôle est un combobox ?

  5. #5
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 239
    Points
    4 239
    Par défaut
    Tu peux faire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For Each ctl As Control In Me.Controls.OfType(Of ComboBox)
    Cela ne te listeras que les contrôles de type ComboBox.

    Attention que si le contrôle ne se trouve pas directement sur le formulaire, il ne sera pas passé en revue.
    Kropernic

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2013
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 55
    Points : 25
    Points
    25
    Par défaut
    Merci, j'essaierais demain. Et en continuant d'arpenter les autres sites j'ai trouvé autrement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    For Each ctrl In Me.Controls
                If TypeOf ctrl Is ComboBox Then
     
                End If
            Next
    Est-ce qu'une façon de faire est mieux qu'une autre ?

  7. #7
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 239
    Points
    4 239
    Par défaut
    C'est à peu de chose près la même chose je pense (je suis pas versé dans les arcanes de .NET).

    Mais avec les 2 méthodes, tu auras le même problème qui est de ne pas passer en revue les contrôles qui sont contenus par autre chose que l'objet désigné par Me.
    Kropernic

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2013
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 55
    Points : 25
    Points
    25
    Par défaut
    Et donc ce que tu veux me dire c'est que je suis en train de lister uniquement les controls de mon formulaire et je ne pourrais pas en lister d'autres c'est ça ?
    Si j'ai tout bien compris ^^

  9. #9
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 239
    Points
    4 239
    Par défaut
    Ce que je veux dire c'est que, si ton formulaire contient un panel (par exemple) qui contient lui-même une combobox, en faisant une boucle sur les contrôles de ton formulaire, tu verras le panel mais pas la combobox qu'il contient.

    Ce qui est tout à fait cohérent vu que la combobox en question fait partie de la liste des contrôles du panel et non pas du formulaire.
    Kropernic

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2013
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 55
    Points : 25
    Points
    25
    Par défaut
    Aujourd'hui c'est que pour mes tests et donc j'ai pas pensé à l'ergonomie pour le moment. Donc j'ai un formulaire où y'a rien dedans et je fais pop mes combobox et mes label.
    C'est un formulaire pour créer un enregistrement dans la base, donc un formulaire avec beaucoup de cbox à remplir pour l'utilisateur. C'est pour ça que je lui proposais une liste.
    Je n'utilise pas de panel et je sais pas si j'en utiliserais, à vrai dire je savais même pas que ça pouvait exister avant que tu ne m'en parle xD Faut que je me documente

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2013
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 55
    Points : 25
    Points
    25
    Par défaut
    Donc du coup j'ai résolu mon problème encore grâce à vous. Merci
    Je met en résolu

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

Discussions similaires

  1. [CSV] Proposer un fichier qui n'existe pas encore
    Par syl202 dans le forum Langage
    Réponses: 4
    Dernier message: 15/11/2008, 16h58
  2. [SQL Server 2005] Selection de ce qui n'existe pas
    Par transistor49 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 20/04/2006, 09h20
  3. Réponses: 8
    Dernier message: 26/01/2006, 14h47
  4. Select qui n'existe pas
    Par daijoubu dans le forum Langage SQL
    Réponses: 2
    Dernier message: 12/01/2006, 18h34
  5. $GET_['tmp'] quand tmp n'existe pas encore ?
    Par sunshine33 dans le forum Langage
    Réponses: 3
    Dernier message: 17/11/2005, 12h33

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