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

sapma Messages postés 174 Statut Membre 5
 
Access ? VB.NET ? PHP ?
0
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
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
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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
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
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
bizalain
 
Pouvez vous me dire comment récupérer l'ID de l'établissement sélectionné ?
quel code?
0
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
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
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
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