[ComboBox]Problème pour affecter une SelectedValue
Bonjour,
je rencontre un probleme lorsque je veux charger les informations d'un formulaire à partir d'une base de données.
Mon application doit permettre de remplir un formulaire avec des textBox, des ComboBox, etc.
Lorsque je le sauvegarde et l'ouvre à nouveau ultérieurement les données sont rechargées :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
| Private Sub GenererLignesPertes(ByVal maConnexion As SqlConnection, ByVal ESP_ID As Integer)
If ESP_ID = 0 Then Return
Try
Dim monReaderSQL As SqlDataReader = readerSQL(maConnexion, "SELECT * FROM TBL_ENTETE_PERTE WHERE PERT_ESP_ID=" & ESP_ID)
Dim monPanelListePerte As System.Windows.Forms.Panel
Dim monPanelPerte As System.Windows.Forms.Control.ControlCollection
Dim monCompteurPerte As Integer = 0, PERT_ID As Integer, PERL_ID As Integer, monIndexCB As Integer
Dim monHeure As Date
Dim monHeureChaine As String = "", maMinuteChaine As String = ""
Dim monCB As ComboBox
Do While monReaderSQL.Read
PERT_ID = monReaderSQL.GetValue(monReaderSQL.GetOrdinal("PERT_ID"))
PERL_ID = monReaderSQL.GetValue(monReaderSQL.GetOrdinal("PERT_PERL_ID"))
monPanelListePerte = Me.panelEntetePerte.Controls.Item("panelBlocPerte_" & PERL_ID).Controls.Item("panelListePerte_" & PERL_ID)
AjouterPerte(monPanelListePerte, PERT_ID) 'Ajoute une ligne de contrôle qui sera 'remplie'
monPanelPerte = monPanelListePerte.Controls.Item("panelPerte_" & PERT_ID).Controls
With monPanelPerte
'pDetail_
monCB = .Item("pDetail_" & PERT_ID)
monCB.SelectedValue = monReaderSQL.GetInt32(monReaderSQL.GetOrdinal("PERT_PERD_ID"))
'pModele_
monCB = .Item("pModele_" & PERT_ID)
monCB.SelectedValue = monReaderSQL.GetInt32(monReaderSQL.GetOrdinal("PERT_MODELE_ID"))
' pLot_
If Me.getUAP = 1 Then
monCB = .Item("pLot_" & PERT_ID)
monIndexCB = monReaderSQL.GetInt32(monReaderSQL.GetOrdinal("PERT_LOT"))
monCB.SelectedValue = monIndexCB
End If
' pMoule_
If Me.getUAP = 3 Then
monCB = .Item("pMoule_" & PERT_ID)
monCB.SelectedValue = monReaderSQL.GetInt32(monReaderSQL.GetOrdinal("PERT_MOULE"))
End If
' pMachine_
monCB = .Item("pMachine_" & PERT_ID)
monCB.SelectedValue = monReaderSQL.GetInt32(monReaderSQL.GetOrdinal("PERT_MACHINE_ID"))
' pArretMachine_
.Item("pArretMachine_" & PERT_ID).Text = monReaderSQL.GetInt32(monReaderSQL.GetOrdinal("PERT_ARRET_MACHINE"))
' pArretProd_
.Item("pArretProd_" & PERT_ID).Text = monReaderSQL.GetInt32(monReaderSQL.GetOrdinal("PERT_ARRET_PROD"))
' pDebut_
monHeure = monReaderSQL.GetDateTime(monReaderSQL.GetOrdinal("PERT_DEB_ARRET"))
If monHeure.Hour < 10 Then monHeureChaine = "0" & monHeure.Hour Else monHeureChaine = monHeure.Hour
If monHeure.Minute < 10 Then maMinuteChaine = "0" & monHeure.Minute Else maMinuteChaine = monHeure.Minute
.Item("pDebut_" & PERT_ID).Text = monHeureChaine & maMinuteChaine
' pFin_
monHeure = monReaderSQL.GetDateTime(monReaderSQL.GetOrdinal("PERT_FIN_ARRET"))
If monHeure.Hour < 10 Then monHeureChaine = "0" & monHeure.Hour Else monHeureChaine = monHeure.Hour
If monHeure.Minute < 10 Then maMinuteChaine = "0" & monHeure.Minute Else maMinuteChaine = monHeure.Minute
.Item("pFin_" & PERT_ID).Text = monHeureChaine & maMinuteChaine
' pObs_
.Item("pObs_" & PERT_ID).Text = monReaderSQL.GetString(monReaderSQL.GetOrdinal("PERT_OBSERV"))
' pAction_
.Item("pAction_" & PERT_ID).Text = monReaderSQL.GetString(monReaderSQL.GetOrdinal("PERT_ACTION"))
' pSolv_
Dim monCheck As CheckBox = .Item("pSolv_" & PERT_ID)
monCheck.Checked = (monReaderSQL.GetInt32(monReaderSQL.GetOrdinal("PERT_PB_RESOL")) = 1)
End With
Loop
monReaderSQL.Close()
Catch ex As Exception
boxErreur(ex.Message)
End Try
End Sub |
Pour expliquer le raisonnement, lorsqu'il y a un enregistrement dans ma base, je créé un nouveau "bloc de contrôles" que je renseigne avec les données de mon tuple.
Cependant, lorsque je j'arrive au niveau au niveau de pLot j'ai un comportement fort étrange du programme.
Code:
1 2 3 4 5 6
| 1 ' pLot_
2 If Me.getUAP = 1 Then
3 monCB = .Item("pLot_" & PERT_ID)
4 monIndexCB = monReaderSQL.GetInt32(monReaderSQL.GetOrdinal("PERT_LOT"))
5 monCB.SelectedValue = monIndexCB
6 End If |
Dans le code ci-dessus, lorsque je mets un point d'arret ligne 4, "monCB" est bien défini, ayant une collection d'objet.
Lorsque je poursuis (avec F8) la ligne 5 renvoie 'Nothing', le ComboBox ayant bien une liste d'objets, monIndexCb ayant bien une valeur appartenant à ma liste d'index du ComboBox, je n'arrive pas à lui affecter cette valeur.
comme si monCB de la ligne 3 et celui de la ligne 5 n'étaient pas les mêmes.
EDIT :
Par contre si je lance la ligne 3 que j'attends 2 minutes avant de lancer la ligne 4 et 5 il prend bien en compte la bonne valeur. J'ai l'impression qu'il n'arrive pas a associer l'objet créé précedemment à ma variable monCB.