Remplir un combobox suivant la selection d'un autre combobox

simraill Messages postés 9 Date d'inscription lundi 14 mai 2012 Statut Membre Dernière intervention 17 mai 2016 - 16 mai 2012 à 10:49
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 - 16 mai 2012 à 15:52
Bonjour à tous,
j'aurais besoin de votre aide car là je galère vraiment (je suis débutant en vb.net)

Alors voilà : j'ai une base de donnée sur SQLserver avec un table Site et table Building.
La table site comprends les champs id_Site et Name_Site.
La table Building comprends elle les champs id_Building , ide_Site et Name_Building.

Donc dans mon premier combobox nommé comboboxSite, j'ai chargé tous les noms de site depuis le champ Name_Site avec le code :

        Try

            objConnexion.Open()
            objCommand.CommandText = "SELECT Site_Name FROM ITIL_Site ORDER BY Site_Name"
            objReader = objCommand.ExecuteReader

            Do While objReader.Read
                comboboxSite.Items.Add(objReader.GetString(0))
            Loop
            objReader.Close()
            objConnexion.Close()
        Catch ex As Exception
            MessageBox.Show("L'erreur suivante a été rencontrée :" & ex.Message)
        End Try


Et je voudrais charger dans ma deuxième combobox nommé comboboxBatiment le nom des bâtiments en fonction du site sélectionné dans le premier combobox.
J'ai essayé avec ce code, mais cela me charge tous les noms des batiments, mais sans tenir compte du site sélectionne
Private Sub comboboxSite_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles comboboxSite.SelectedIndexChanged
        comboboxBatiment.Enabled = True


        Try
            objConnexion.Open()
            objCommand.CommandText "SELECT Building_Name FROM ITIL_Building B, ITIL_Site S WHERE S.id_Site B.ide_Site AND S.Site_Name ='" & comboboxSite.SelectedItem & "'"
            objReader = objCommand.ExecuteReader
            Do While objReader.Read
                comboboxBatiment.Items.Add(objReader.GetString(0))
            Loop
            objReader.Close()
            objConnexion.Close()
        Catch ex As Exception
            MessageBox.Show("L'erreur suivante a été rencontrée :" & ex.Message)
        End Try
    End Sub



Merci à tout ceux qui prendront le temps de me lire et de m'aider.

Simrail

7 réponses

simraill Messages postés 9 Date d'inscription lundi 14 mai 2012 Statut Membre Dernière intervention 17 mai 2016
16 mai 2012 à 10:57
Ok,
en fait mon code marche très bien .
Le problème, c'est que la combobox ne se vide pas quand je change de Site dans ma première combobox !!
0
simraill Messages postés 9 Date d'inscription lundi 14 mai 2012 Statut Membre Dernière intervention 17 mai 2016
16 mai 2012 à 11:42
Par contre n'y aurait-il pas une méthode moins lourde, pour pouvoir faire cela en n'utilisant que les id_Site, id_Building et ide_Site, ide_Building dans mes requêtes?!
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
16 mai 2012 à 13:48
Salut

comboboxSite.Items.Clear()
  Do While objReader.Read
        comboboxSite.Items.Add(objReader.GetString(0))
Loop


comboboxBatiment.Items.Clear()
Do While objReader.Read
    comboboxBatiment.Items.Add(objReader.GetString(0))
Loop
0
simraill Messages postés 9 Date d'inscription lundi 14 mai 2012 Statut Membre Dernière intervention 17 mai 2016
16 mai 2012 à 14:04
Salut,
Je ne vois pas ce que m'apporte ton code?!
Je ne vois pas de différence avec le mien?!
0

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

Posez votre question
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
16 mai 2012 à 14:34
Le problème, c'est que la combobox ne se vide pas quand je


avant de le charger il faut le vider

comboboxBatiment.Items.Clear()
0
simraill Messages postés 9 Date d'inscription lundi 14 mai 2012 Statut Membre Dernière intervention 17 mai 2016
16 mai 2012 à 14:41
Ah oui d'accord, je m'étais mal exprimer.
J'avais compris d’où venais le problème et je l'avais corriger par la même occasion !!

Par contre il n'y aurait-il pas un moyen de passer que par les id, afin d'alléger mes requêtes SQL?!
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
16 mai 2012 à 15:52
Par contre il n'y aurait-il pas un moyen de passer que par les id, afin d'alléger mes requêtes SQL?!


c'est tellement lourd combien de kg

objCommand.CommandText "SELECT Building_Name FROM ITIL_Building,ITIL_Site  WHERE ITIL_Site.id_Site ITIL_Building.ide_Site AND S.Site_Name ='" & comboboxSite.SelectedItem & "'"


ou
ajouter une list de code
Private listIdName As New List(Of int64)
'dans la sub où tu charges les noms des sites
Try
  objConnexion.Open()
  objCommand.CommandText = "SELECT id_Site, Site_Name FROM ITIL_Site ORDER BY Site_Name"
  objReader = objCommand.ExecuteReader
  Do While objReader.Read
     listIdName.clear
     comboboxSite.Items.Add(objReader.GetString(1))
     listIdName.Add(objreader.GetInt64(0))
  Loop
  objReader.Close()
  objConnexion.Close()
Catch ex As Exception
      MessageBox.Show("L'erreur suivante a été rencontrée :" & ex.Message)
End Try


'dans la sub où tu choisi un site dans le combo

Private Sub comboboxSite_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles comboboxSite.SelectedIndexChanged
  comboboxBatiment.Enabled = True
 dim idsite as int64
 idsite = listIdName(comboboxSite.SelectedIndex)

objCommand.CommandText "SELECT Building_Name FROM ITIL_Building WHERE ITIL_Building.ide_Site 'idsite' AND S.Site_Name ='" & comboboxSite.SelectedItem & "'"
0
Rejoignez-nous