Faire correspondre 2 class en combobox vb.net
Résolu
WarT
Messages postés
67
Date d'inscription
Statut
Membre
Dernière intervention
-
WarT Messages postés 67 Date d'inscription Statut Membre Dernière intervention -
WarT Messages postés 67 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je suis actuellement en train de faire un programme pour modifier une base de données.
Dans ma base de données je dispose de deux tables :
parent(no_parent(PRIMAIRE),nom_parent,prenom_parent,adresse_parent,cp_parent,ville_parent)
enfant(no_enfant(PRIMAIRE),nom_enfant,prenom_enfant,no_parent#)
Dans mon programme, je dispose d'une combobox dans laquelle s'affiche la table enfant (via une classe), de deux textbox (nom,prenom), et d'une combobox dans laquelle s'affiche la table parent (encore une fois via une classe).
Voici mon code :
Imports System
Imports System.Data
Imports MySql.Data
Imports MySql.Data.MySqlClient
Public Class Modifier_un_enfant
Private oConnexion As New MySqlConnection("server=localhost;user=root;database=projet_alsh;port=3306;password=;")
Private oCommande As MySqlCommand
Private Sub Modifier_un_enfant_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim requete As String
cbx_modifier_un_enfant_enfant.Items.Clear()
Try
oConnexion.Open()
requete = "SELECT no_enfant,nom_enfant,prenom_enfant,no_parent FROM enfant"
oCommande = New MySqlCommand(requete, oConnexion)
Dim Enfant As MySqlDataReader = oCommande.ExecuteReader
While Enfant.Read()
cbx_modifier_un_enfant_enfant.Items.Add(New Class_Modifier_un_enfant(Enfant.Item("no_enfant"), Enfant.Item("nom_enfant"), Enfant.Item("prenom_enfant"), Enfant.Item("no_parent")))
End While
Enfant.Close()
Catch ex As Exception
MessageBox.Show("Insertion Class : " + ex.Message)
Finally
oConnexion.Close()
End Try
Try
oConnexion.Open()
requete = "SELECT no_parent,nom_parent,prenom_parent,adresse_parent,code_postal_parent,ville_parent FROM parent"
oCommande = New MySqlCommand(requete, oConnexion)
Dim Parent As MySqlDataReader = oCommande.ExecuteReader
While Parent.Read()
cbx_modifier_un_enfant_parent.Items.Add(New Class_Modifier_un_parent(Parent.Item("no_parent"), Parent.Item("nom_parent"), Parent.Item("prenom_parent"), Parent.Item("adresse_parent"), Parent.Item("code_postal_parent"), Parent.Item("ville_parent")))
End While
Parent.Close()
Catch ex As Exception
MessageBox.Show("Insertion Class : " + ex.Message)
Finally
oConnexion.Close()
End Try
End Sub
Private Sub cbx_modifier_un_enfant_enfant_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbx_modifier_un_enfant_enfant.SelectedIndexChanged
tbx_nomenfant.Text = cbx_modifier_un_enfant_enfant.SelectedItem.getnom
tbx_prenomenfant.Text = cbx_modifier_un_enfant_enfant.SelectedItem.getprenom
End Sub
End Class
Mon problème est le suivant : lorsque je sélectionne un enfant dans la combobox enfant, les textbox se remplissent en fonction de l'item sélectionné et des données implémentées dans la class, mais la combobox parent ne sélectionne aucun parent, cela veut dire qu'a chaque modification d'un enfant il faut resélectionner le parent.
Je souhaiterai faire une boucle afin de faire correspondre le no_parent de ma classe parent et enfant pour que ma combobox parent sélectionne le parent correspondant à l'enfant sélectionné dans ma combobox enfant (^^) mais je n'arrive pas à trouver de boucle qui fonctionne, pouvez-vous m'aider ?
Si ce n'est pas assez clair, dites le moi =)
Merci !
Je suis actuellement en train de faire un programme pour modifier une base de données.
Dans ma base de données je dispose de deux tables :
parent(no_parent(PRIMAIRE),nom_parent,prenom_parent,adresse_parent,cp_parent,ville_parent)
enfant(no_enfant(PRIMAIRE),nom_enfant,prenom_enfant,no_parent#)
Dans mon programme, je dispose d'une combobox dans laquelle s'affiche la table enfant (via une classe), de deux textbox (nom,prenom), et d'une combobox dans laquelle s'affiche la table parent (encore une fois via une classe).
Voici mon code :
Imports System
Imports System.Data
Imports MySql.Data
Imports MySql.Data.MySqlClient
Public Class Modifier_un_enfant
Private oConnexion As New MySqlConnection("server=localhost;user=root;database=projet_alsh;port=3306;password=;")
Private oCommande As MySqlCommand
Private Sub Modifier_un_enfant_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim requete As String
cbx_modifier_un_enfant_enfant.Items.Clear()
Try
oConnexion.Open()
requete = "SELECT no_enfant,nom_enfant,prenom_enfant,no_parent FROM enfant"
oCommande = New MySqlCommand(requete, oConnexion)
Dim Enfant As MySqlDataReader = oCommande.ExecuteReader
While Enfant.Read()
cbx_modifier_un_enfant_enfant.Items.Add(New Class_Modifier_un_enfant(Enfant.Item("no_enfant"), Enfant.Item("nom_enfant"), Enfant.Item("prenom_enfant"), Enfant.Item("no_parent")))
End While
Enfant.Close()
Catch ex As Exception
MessageBox.Show("Insertion Class : " + ex.Message)
Finally
oConnexion.Close()
End Try
Try
oConnexion.Open()
requete = "SELECT no_parent,nom_parent,prenom_parent,adresse_parent,code_postal_parent,ville_parent FROM parent"
oCommande = New MySqlCommand(requete, oConnexion)
Dim Parent As MySqlDataReader = oCommande.ExecuteReader
While Parent.Read()
cbx_modifier_un_enfant_parent.Items.Add(New Class_Modifier_un_parent(Parent.Item("no_parent"), Parent.Item("nom_parent"), Parent.Item("prenom_parent"), Parent.Item("adresse_parent"), Parent.Item("code_postal_parent"), Parent.Item("ville_parent")))
End While
Parent.Close()
Catch ex As Exception
MessageBox.Show("Insertion Class : " + ex.Message)
Finally
oConnexion.Close()
End Try
End Sub
Private Sub cbx_modifier_un_enfant_enfant_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbx_modifier_un_enfant_enfant.SelectedIndexChanged
tbx_nomenfant.Text = cbx_modifier_un_enfant_enfant.SelectedItem.getnom
tbx_prenomenfant.Text = cbx_modifier_un_enfant_enfant.SelectedItem.getprenom
End Sub
End Class
Mon problème est le suivant : lorsque je sélectionne un enfant dans la combobox enfant, les textbox se remplissent en fonction de l'item sélectionné et des données implémentées dans la class, mais la combobox parent ne sélectionne aucun parent, cela veut dire qu'a chaque modification d'un enfant il faut resélectionner le parent.
Je souhaiterai faire une boucle afin de faire correspondre le no_parent de ma classe parent et enfant pour que ma combobox parent sélectionne le parent correspondant à l'enfant sélectionné dans ma combobox enfant (^^) mais je n'arrive pas à trouver de boucle qui fonctionne, pouvez-vous m'aider ?
Si ce n'est pas assez clair, dites le moi =)
Merci !
4 réponses
-
re:
Cela ne change rien au fait de pouvoir modifier le parent, cela te permettra
simplement de localisé le parent par une nouvelle lecture et ensuite par
balayage de le trouver dans ta liste déroulante parent.
Tu pourras trouver son index et le positionner dans ta liste déroulante.
Pour ma part, je n'ai pas compris comment tu peux ajouter une série d'éléments
dans un combobox :
cbx_modifier_un_enfant_enfant.Items.Add(New Class_Modifier_un_enfant(Enfant.Item("no_enfant"), Enfant.Item("nom_enfant"), Enfant.Item("prenom_enfant"), Enfant.Item("no_parent")))
en fait tu insère un DataRow ?
Cdt
Lupin-
re:
S'il s'agit bien d'un DataRow qui est insérer dans tes ComboBoxs,
tu peux sélectionner le parent ainsi :
Private Sub cbx_Enfants_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbx_Enfants.SelectedIndexChanged If (Me.cbx_Enfants.SelectedIndex > 0) Then Dim Boucle As Int32 = 0 Dim Position As Int32 = 0 Dim Dr As DataRowView = DirectCast(Me.cbx_Enfants.SelectedItem, DataRowView) Dim NumeroParent As String = Dr(3).ToString For Boucle = 0 To Me.cbx_Parents.Items.Count - 1 Dr = DirectCast(Me.cbx_Parents.Items(Boucle), DataRowView) If (Dr(0).ToString.Equals(NumeroParent)) Then Position = Boucle Exit For End If Next Me.cbx_Parents.SelectedIndex = Position End If End Sub
Cdt
Lupin
-
-
Bonjour,
simplement tu pourrais tout simplement retourner à la BD
avec une clause WHERE dans le select du genre :
"SELECT no_parent,nom_parent,prenom_parent,adresse_parent,code_postal_parent,ville_parent FROM parent WHERE no_parent = " & NumParent
où NumParent est affecté lors de l'évènement Changed du ComboBox Enfants
Bien entendu, tu aurais avantage à travailler sur un modèle organique d'au
moins trois couches, et alimenté ton interface par des collections, bon c'est
mon humble avis, mais quand il y a BD...
Jouer dans ton interface avec des collections d'objets te permettrait d'utiliser
les méthodes LinQ pour gérer ce genre de situation.
Cdt
Lupin -
"modèle organique d'au moins trois couches" ? "méthodes LinQ" ? Je crois que je n'ai pas encore vu ça en cours x)
Mais pour l'histoire du WHERE cela ne marchera pas car le programme doit offrir la possibilité de modifié le parent, or avec un WHERE restreindra juste les modifications possible au parent étant déjà associé à l'enfant, autrement dit aucunes modifications du parent ne sera possible (enfin il me semble ^^). -
C'est plus ou moins se que j'ai trouvé ^^
For i = 0 To (cmb_parent.Items.Count - 1) t = Split(cmb_parent.Items(i).getno.ToString) If t(0) = cmb_enfant.SelectedItem.getnoparent.ToString Then cmb_parent.SelectedIndex = i End If Next
J'ai bidouillé un peu et j'ai trouvé ça qui marche très bien.
Merci de ton aide lupin =)