Liste box ne se rempli pas [Résolu]

Messages postés
12
Date d'inscription
mercredi 15 novembre 2006
Statut
Membre
Dernière intervention
10 mai 2012
- - Dernière réponse : snakester
Messages postés
12
Date d'inscription
mercredi 15 novembre 2006
Statut
Membre
Dernière intervention
10 mai 2012
- 10 mai 2012 à 21:55
Bonjour j'ai une classe employer avec une connexion à sql et je récupère les données avec un datareader. J'ai un formulaire MainPage qui a un list box. Je n'ai pas d'erreurs mais le listbox reste vide. J'ai besoin qu'on m'éclaire s.v.p


Public Sub TousEmployes()
Try
myCommand = New SqlCommand
myCommand.Connection = conVob
myCommand.CommandText = ("Select * from Employes")
myReader = myCommand.ExecuteReader
Do While myReader.Read
Prenom = myReader.GetString(2)
Nom = myReader.GetString(3)
Dim LeMain = New MainPage
LeMain.lbToutEmploye.Items.Add(Nom & " " & Prenom)

Loop
Catch ex As Exception
MsgBox(ex)

End Try
End Sub

----------------
la page main

Imports ProjectTest.classToutEmployes
Public Class MainPage
Private WithEvents LesEmployes As New classToutEmployes
Private Sub MainPage_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

Try
ConBd()
MsgBox("connexion établie")
Catch ex As Exception
MsgBox(ex)
End Try




LesEmployes.TousEmployes()


End Sub
Afficher la suite 

8 réponses

Meilleure réponse
Messages postés
329
Date d'inscription
jeudi 20 novembre 2003
Statut
Membre
Dernière intervention
10 mai 2014
4
3
Merci
Bonsoir,

Je m'insère dans votre conversation.
Ton problème ne vient pas de ton reader mais de ceci

Dim LeMain = New MainPage

Quand tu déclares cela tu crées une nouvelle instance de ta form MainPage mais ce n'est pas la même que celle que tu lances au démarrage.


Dans ta classe déclare ta fonction comme ceci
Public Sub TousEmployes(Byval MaForm as MainPage ) 
Try 
myCommand = New SqlCommand 
myCommand.Connection = conVob 
myCommand.CommandText = ("Select * from Employes") 

myReader = myCommand.ExecuteReader 
Do While myReader.Read 
Prenom = myReader.GetString(2) 
Nom = myReader.GetString(3) 
'Dim LeMain = New MainPage 
'LeMain.lbToutEmploye.Items.Add(Nom & " " & Prenom) 
MaForm.lbToutEmploye.Items.Add(Nom & " " & Prenom) 
MsgBox(Nom & " " & Prenom) 
Loop 
Catch ex As Exception 
MsgBox(ex) 

End Try 
End Sub 


Ensuite dans ton appel à ta fonction sur ta form

LesEmployes.TousEmployes(Me)


Tu passes en paramètre ta form dans ta classe pour utiliser les contrôles de ta form et non pas ceux d'une nouvelle instance.

@+LIM

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 190 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_lim
Messages postés
781
Date d'inscription
lundi 22 janvier 2007
Statut
Membre
Dernière intervention
30 octobre 2013
3
0
Merci
Tante ceci

Après
Do While myReader.Read

tu mets

MsgBox("dans la boucle")

donc tu aurra

Do While myReader.Read
MsgBox("dans la boucle")

Puis tu lance ton code

Depuis là deux chose :
1) Tu vois le message "dans la boucle" et tu dois continuer à chercher l'erreur

2) Tu vois pas le message "dans la boucle" et donc myReader est vide
Commenter la réponse de 4u4me4us
Messages postés
12
Date d'inscription
mercredi 15 novembre 2006
Statut
Membre
Dernière intervention
10 mai 2012
0
Merci
Merci pour ta réponse.

J'ai éffective le nom et le prénom dans le msgbox mais la listbox ne se remplie pas ???

T'as une autre piste je sèche là dessus et je peux pas continuer plus loin sans remplir la listbox

Est les imports ???

Merci
Commenter la réponse de snakester
Messages postés
12
Date d'inscription
mercredi 15 novembre 2006
Statut
Membre
Dernière intervention
10 mai 2012
0
Merci
Quand je mets tout le code dans le formulaire qui a les contrôles ça fonctionne bien, mais quand je mets le code dans une feuille de classe a part ça ne fonctionne plus.

Je vous mets tout le code car j'ai oublié une partie tout à l'heure.

--------la feuille de classe
Imports System.Data
Imports System.Data.SqlClient
Imports System.Windows.Forms.Form
Imports ProjectTest.MainPage

Public Class classToutEmployes
Inherits ConnexionSql


Private _id As Integer
Private _noEmp As Integer
Private _prenom As String
Private _nom As String
Private _fonction As String
Private _annExp As Integer
Private _certifie As Boolean
Private _sexe As String

Public Property Id() As Integer

Get
Return _id
End Get
Set(ByVal value As Integer)
_id = value
End Set

End Property

Public Property NoEmp() As String

Get
Return _noEmp
End Get
Set(ByVal value As String)
_noEmp = value
End Set

End Property

Public Property Prenom() As String

Get
Return _prenom
End Get
Set(ByVal value As String)
_prenom = value
End Set

End Property
Public Property Nom() As String

Get
Return _nom
End Get
Set(ByVal value As String)
_nom = value
End Set

End Property

Public Property Fonction() As String

Get
Return _fonction
End Get
Set(ByVal value As String)
_fonction = value
End Set

End Property

Public Property AnnExperience() As String

Get
Return _annExp
End Get
Set(ByVal value As String)
_annExp = value
End Set

End Property

Public Property Certifie() As String

Get
Return _certifie
End Get
Set(ByVal value As String)
_certifie = value
End Set

End Property

Public Property Sexe() As String

Get
Return _sexe
End Get
Set(ByVal value As String)
_sexe = value
End Set

End Property

Public Sub TousEmployes()


Try

myCommand = New SqlCommand
myCommand.Connection = conVob
myCommand.CommandText = ("Select * from Employes")

myReader = myCommand.ExecuteReader
Do While myReader.Read
Prenom = myReader.GetString(2)
Nom = myReader.GetString(3)
Dim LeMain = New MainPage
LeMain.lbToutEmploye.Items.Add(Nom & " " & Prenom)
MsgBox(Nom & " " & Prenom)
Loop
Catch ex As Exception
MsgBox(ex)

End Try
End Sub

End Class

---------------------------------------
LE formulaire avec les controles

Imports System.Data
Imports System.Data.SqlClient
Imports ProjectTest.ConnexionSql
Imports ProjectTest.classToutEmployes
Public Class MainPage

Private WithEvents LesEmployes As New classToutEmployes
Private Sub MainPage_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

Try
ConBd()
MsgBox("connexion établie")
Catch ex As Exception
MsgBox(ex)
End Try




LesEmployes.TousEmployes()


End Sub

Private Sub lbToutEmploye_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lbToutEmploye.SelectedIndexChanged

End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click


End Sub
End Class


si je roule le listbox reste vide.

Je vois pas pourquoi.
Commenter la réponse de snakester
Messages postés
3251
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
16 octobre 2019
46
0
Merci
Salut

1 Quand tu postes un code utilise la coloration
syntaxique 3 iem icon de droite

2 utilise le debugger
met un point d'arret
à la ligne
Do While myReader.Read 

lance ton prog il va s'arreter au point d'arret
press F8 pour executer pas à pas
est que la boucle while est éxecuté
si oui press F8 pour continuer
regarde la valeur de prenom avec le watch
Commenter la réponse de cs_ShayW
Messages postés
329
Date d'inscription
jeudi 20 novembre 2003
Statut
Membre
Dernière intervention
10 mai 2014
4
0
Merci
Re
au lieu de passer la form en paramètres tu peux aussi passer la listbox directement

@+LIM
Commenter la réponse de cs_lim
Messages postés
12
Date d'inscription
mercredi 15 novembre 2006
Statut
Membre
Dernière intervention
10 mai 2012
0
Merci
Merci @+LIM de ta réponse. Je regarde ça tout de suite.
Commenter la réponse de snakester
Messages postés
12
Date d'inscription
mercredi 15 novembre 2006
Statut
Membre
Dernière intervention
10 mai 2012
0
Merci
Merci @+LIM c'est génial ça fonctionne très bien.
Commenter la réponse de snakester