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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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.