Combobox

bizalain -  
 bialain -
Bonjour,
J'ai 2 combo sur le userform "combo1" pour les établissements et "combo2" pour les élèves. Je veus donc faire les opérations suivantes:
- Afficher tous les noms des établissements dans le combo1 et selectioner un;
- Afficher dans le combo2 les noms des élèves qui étudient sur l'établissement selectioné dans le combo1.

je vous remercie d'avance.



Edit : suppression adresse mail.

12 réponses

  1. sapma Messages postés 174 Statut Membre 5
     
    Access ? VB.NET ? PHP ?
    0
  2. bizalain
     
    Mr6 de la réponse. j'utilise le VB.NET et la base de données en Sql server. J'attend votre bonne réponse. je vs remer6
    0
  3. sapma Messages postés 174 Statut Membre 5
     
    Tu as donc 2 requêtes (commande SQL) à exécuter :

    1 - pour alimenter la liste des établissements : lorsque tu affiche la fenetre : form1_load
    select libele from table_etablisssment
    remplir la table du dataset
    pour chaque élément dans table listeEtablissement.addItem("établissement")

    2 - pour alimenter la liste des élevés selon l'établissement sélectionné : lorsque tu sélectionnes une ligne dans la liste des établissements. combobox1_change

    select nom from table_eleve_etablissement where etablissement = combobox1.value
    remplir la table du dataset
    pour chaque élément dans table listeEleveEtablissement.addItem("élève")

    coté code exacte, je n'ai pas Visual Studio Ici pour te donner la syntaxe correcte.
    0
  4. bizalain
     
    Mr6 bcp de votre réponse. J'ai essayé mais ça n'a pas marché. peut-être que la syntaxe n'est pas correcte.
    Pour la 1ère requette, pas de problème. voici ce que j'ai écrit:
    Dans le form_load j'ai ecrit ceci:

    Req = " select * from TabEtablissement "
    ChaineConnexion = "server=localhost;uid=sa;pwd=;database=Orientation"
    conn = New SqlConnection(ChaineConnexion)
    conn.Close()
    conn.Open()

    DA = New SqlDataAdapter(Req, conn)
    DS = New DataSet()
    DA.Fill(DS, "TabEtabliOrigine")

    ComboBox1.DisplayMember = "NomEtablissement"
    ComboBox1.ValueMember = "EtablissementAuto"
    ComboBox1.DataSource = DS.Tables("TabEtablissement")
    Jusqu'ici, il n'y a pas de problème mais pour la 2ème requette j'ai écrit ceci:

    Private Sub ComboBox1_SelectedValueChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ComboEtabli.SelectedValueChanged
    Req = "select * FROM TabEleve where EtablissementAuto =
    ComboEtabli.Value "
    conn = New SqlConnection(ChaineConnexion)
    conn.Close()
    conn.Open()
    DA = New SqlDataAdapter(Req, conn)
    DS = New DataSet()
    DA.Fill(DS, "TabEleve")
    ComboBox2.DisplayMember = "CodeEleve"
    ComboBox2.DataSource = DS.Tables("TabEleve")

    End Sub

    En executant, il y a un message d'erreur qui dit ceci: The multi-part identifier "ComboEtabli.Value " could not be bound.
    N.B: EtablissementAuto est la clé primaire dans TabEtablissement et la clé etrangère dans TabEleve

    Merci!!
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Polux31 Messages postés 7219 Statut Membre 1 204
     
    Bonjour,

    Tout d'abord, après une lecture rapide, il y a une erreur ici:
    Req = "select * FROM TabEleve where EtablissementAuto = 
    ComboEtabli.Value " 


    Il faut faire comme ça à condition que le champ soit de type alpha ainsi que le contenu du combo :
    Req = "select * FROM TabEleve where EtablissementAuto = '" & 
    ComboEtabli.Value & " ' "


    Il semblerait que EtablissementAuto soit de type numérique, donc :
    Req = "select * FROM TabEleve where EtablissementAuto = " & 
    ComboEtabli.Value


    Mais je ne pense pas que le combo soit rempli avec l'identifiant de la table mais certainement avec le libellé de l'établissement.
    Il faut donc, dans un premier temps, récupérer l'ID de l'établissement sélectionné et ensuite faire le SELECT dans la table TabEleve en passant l'ID dans la condition WHERE.

    ;o)
    «Ce que l'on conçoit bien s'énonce clairement, Et les mots pour le dire arrivent aisément.»
    Nicolas Boileau
    0
  7. bizalain
     
    J'ai vu votre réponse et je vous en remercie.
    J'ai essayé avec
    Req = "select * FROM TabEleve where EtablissementAuto = '" &ComboEtabli.Value & " ' "
    et j'ai réçu un message
    Value is not a member of ` System.Windows.Form.ComboBox'.
    Puis j'ai essayé encore avec :
    Req = "select * FROM TabEleve where EtablissementAuto = '" &ComboEtabli.ValueMember & " ' "
    et j'ai reçu le message suivant:
    Conversion failed when converting the varchar value 'EtabliOrigineAuto' to data type int.
    0
  8. Polux31 Messages postés 7219 Statut Membre 1 204
     
    Bonjour,

    Il faut d'abord récupérer l'ID de tabEtablissement correspondant à la selection de la combo1 et ensuite faire le SELECT sur la table TabEleve en utilisant l'ID récupéré.

    ;o)
    0
  9. bizalain
     
    Pouvez vous me dire comment récupérer l'ID de l'établissement sélectionné ?
    quel code?
    0
  10. Polux31 Messages postés 7219 Statut Membre 1 204
     
    heuuuu là c'est pas un peu abusé ??? non ?

    C'est une simple requête SELECT avec une clause WHERE, rien de vraiment compliqué.
    0
  11. bizalain
     
    je viens de passer quelques jours mai je n'arrive pas à trouver la bonne réponse.

    Dans le form load, j'ai mis ceci:

    DAEtabliOrigine = New SqlDataAdapter("select * from TabEtabliOrigine", conn)
    DSEtabliOrigine = New DataSet()
    DAEtabliOrigine.Fill(DSEtabliOrigine, "TabEtabliOrigine")
    ComboEtabli.ValueMember = "EtabliOrigineAuto"
    ComboEtabli.DisplayMember = "NomEtablissement"
    ComboEtabli.DataSource = DSEtabliOrigine.Tables("TabEtabliOrigine")

    jusqu'ici il y a pas de problèmes.

    Dans le ComboEtabli_SelectedIndexChanged, j'ai écrit ceci:

    Dim nrecord As Integer = ComboEtabli.SelectedIndex
    scom = "select * FROM TabEtabliOrigine"

    Dim nEtabli As Integer = Integer.Parse(DSEtabliOrigine.Tables("TabEtabliOrigine").Rows(nrecord)("EtabliOrigineAuto").ToString())
    Dim EtabliReq As String = "select * from TabEleve where EtabliOrigineAuto = '" + nEtabli + "'"
    DATabEleve = New SqlDataAdapter(EtabliReq, conn)
    DSTabEleve = New DataSet
    DATabEleve.Fill(DSTabEleve, "TabEleve")

    ComboNumEleve.DataSource = DSTabEleve.Tables("TabEleve")
    ComboNumEleve.DisplayMember = "CodeEleve"
    ComboNumEleve.ValueMember = "EleveAuto"

    Mais, je reçois un message d'erreur disant que la conversion du type string en type double n'est pas valide pour le "select * from TabEleve where EtabliOrigineAuto = '" + nEtabli + "'" .

    je n'arrive pas à trouver l'erreur.
    0
  12. sapma Messages postés 174 Statut Membre 5
     
    bizalain,

    1 - comment récupérer la valeur selecionnée dans un combobox.
    dim nomEtablis as string
    nomEtablis = combobox1.text

    2 - chercher l'ID ou bien tous les champs selon la valeur du combobox (dans une même table maintenant) :

    Dim IdEtabliReq As String = "select * from tableEtablissement where etablissementAuto = ' " + nomEtablis + " ' "
    DA = New SqlDataAdapter(IdEtabliReq, conn)
    DS= New DataSet
    DA.Fill(DS, "TabIdEtab")

    Cette dernière table doit contenir une seule ligne normalement si les établissement ont un nom unique pour chaqu'un.

    et voilà tu as toute la ligne de l'établissment, tu peux en faire ce que tu veux

    là tu veux chercher les élèves ..

    donc pointe sur la colonne de l'ID dans la table TabIdEtab du DS, et récupère la valeur pour la passer en requete :

    DS.Tables('TabIdEtab').Rows(0).Item(NNN).value.ToString()

    Le NNN pour la position de la colonne dans la table de la base donnée

    Exemple :
    TableEtablissment
    ID | EtablissmeentAuto | Date | Note | ...

    le ID est sur la position 1 (sinon 0 )

    donc

    DS.Tables('TabIdEtab').Rows(0).Item(1).value.ToString())

    je crois que tu connais la suite :)

    et pour :

    << Mais, je reçois un message d'erreur disant que la conversion du type string en type double n'est pas valide pour le "select * from TabEleve where EtabliOrigineAuto = '" + nEtabli + "'" . >>
    je pense tu peux remplacer nEtabli par nEtabli.ToString.
    0
  13. bialain
     
    très bien merci!
    j'ai remplacé "nEtabli" par "nEtabli.ToString" et ça a bien marché.

    Vraiment, je vous remercie beaucoup. C'est très gentil.
    0