Remplir un combobox suivant la selection d'un autre combobox

Signaler
Messages postés
9
Date d'inscription
lundi 14 mai 2012
Statut
Membre
Dernière intervention
17 mai 2016
-
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
-
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

Messages postés
9
Date d'inscription
lundi 14 mai 2012
Statut
Membre
Dernière intervention
17 mai 2016

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 !!
Messages postés
9
Date d'inscription
lundi 14 mai 2012
Statut
Membre
Dernière intervention
17 mai 2016

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?!
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
50
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
Messages postés
9
Date d'inscription
lundi 14 mai 2012
Statut
Membre
Dernière intervention
17 mai 2016

Salut,
Je ne vois pas ce que m'apporte ton code?!
Je ne vois pas de différence avec le mien?!
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
50
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()
Messages postés
9
Date d'inscription
lundi 14 mai 2012
Statut
Membre
Dernière intervention
17 mai 2016

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?!
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
50
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 & "'"