Ajouter des controls

Résolu
Signaler
Messages postés
260
Date d'inscription
vendredi 2 décembre 2005
Statut
Membre
Dernière intervention
3 novembre 2007
-
Messages postés
260
Date d'inscription
vendredi 2 décembre 2005
Statut
Membre
Dernière intervention
3 novembre 2007
-
Bonjour, j'aimerais  ajouter dynamiquement des controls dans un fichier ascx.

Voilà comment je procède, mais cela ne m'affiche que le dernier.

'Pour chaque person présente
For i
As
Integer = 0
To person.Length - 1
   'Récupere le nom & prenom

   Dim name()
As
String = Split(person(i),
" ")
   'Procedure stockée qui me retourne le n° d'une personne

   Dim homeNoCommand
As
New OleDbCommand(
"AAA_getNumber " & name(0) &
", " & name(1) &
", " & type, Conn)
  
   Conn.Open()

   Dim number
As
String = homeNoCommand.ExecuteScalar
   Conn.Close()

   
   'personPanel est un panel avec 3 control (les 3 en-dessous)
   Dim myPane
As Panel = personPanel
   'Affectation des différentes valeurs

   CType(myPane.FindControl(
"fNameVal"), Label).Text = name(0)

   CType(myPane.FindControl(
"lNameVal"), Label).Text = name(1)

   CType(myPane.FindControl(
"phoneNo"), Label).Text = number

   'Ajoute le panel dans le plus grand panel
   phonePanel.Controls.Add(myPane)

Next

Mais voilà, comme dit plus haut, seule la dernière personne apparait.

Merci d'avance, et bon après-midi

 ElpenS

8 réponses

Messages postés
260
Date d'inscription
vendredi 2 décembre 2005
Statut
Membre
Dernière intervention
3 novembre 2007

Ben voilà, après quelques heures, j'ai enfin trouvé un moyen :

Dim personCtr
As
New personPane
personCtr =
CType(LoadControl(
"personPane.ascx"), personPane)
personCtr.FirstName = name(0)
personCtr.LastName = name(1)
personCtr.phoneNumber = number
phonePanel.Controls.Add(personCtr)
Et il m'ajoute mes petits panel.

Merci encore Nurgle pour ton aide

Bon après-midi a tous.

 ElpenS
Messages postés
1642
Date d'inscription
samedi 6 novembre 2004
Statut
Modérateur
Dernière intervention
28 avril 2011
3
Salut,
Le problème dans ton code est qu'en réalité tu crées pas de "personPanel" à chaque iteration, tu crées juste une variable "myPane" qui pointe vers le "persoPanel" d'origine !

Si "personPanel" est un Panel que tu as ajouté à ta page, tu vas plutôt l'enlever et d'abord créer un custom control, qui va hériter de Panel, et qui va lui-même contenir trois labels, et qui lui va s'appeller PersonPanel.

Et ensuite tu fais :

Dim myPane As New PersonPanel() 
'Affectation des différentes valeurs
   CType(myPane.FindControl("fNameVal"), Label).Text = name(0)
   CType(myPane.FindControl("lNameVal"), Label).Text = name(1)
   CType(myPane.FindControl("phoneNo"), Label).Text = number

A++

<hr width="100%" size="2" />Nurgle (Antoine)
Messages postés
260
Date d'inscription
vendredi 2 décembre 2005
Statut
Membre
Dernière intervention
3 novembre 2007

Je suis désolé, mais je n'ai pas réussi...

J'ai créer un control ascx (personPane) que j'ai registré dans PhonePane comme ceci :
<%

@
Register
Src="personPane.ascx"
TagName="persoPane"
TagPrefix="ucPerson" %>

Ensuite, j'ai fait :

Dim myPane As New PersonPanel() 
'Affectation des différentes valeurs
   CType(myPane.FindControl("fNameVal"), Label).Text = name(0)
   CType(myPane.FindControl("lNameVal"), Label).Text = name(1)
   CType(myPane.FindControl("phoneNo"), Label).Text = number

Mais j'obtient l'erreur :  Object reference not set to an instance of an object.

Et si je test myPane.fNameVal = name(0) l'erreur est : myPane.fNameVal is not accessible in this context because it is 'Protected

Merci pour ton aide

 ElpenS
Messages postés
1642
Date d'inscription
samedi 6 novembre 2004
Statut
Modérateur
Dernière intervention
28 avril 2011
3
Eh bien, utilises des propriétés, dans ton PersonPanel :

Public Property FirstName As String
   Set(value As String)
      Me.fNameVal.Text = value
   End Set
   Get
      Return Me.fNameVal.Text
   End Get
End Property

Et tu fais pareil pour LastName et PhoneNumber, et comme ça tu n'as plus qu'à faire :

myPane.FirstName = name(0)
myPane.LastName = name(1)
myPane.PhoneNumber = number

A++

<hr width="100%" size="2" />Nurgle (Antoine)
Messages postés
260
Date d'inscription
vendredi 2 décembre 2005
Statut
Membre
Dernière intervention
3 novembre 2007

Merci, mais cela ne fonctionne toujours pas  ...

J'obtient toujours l'erreur :  {"Object reference not set to an instance of an object."}

C'est bien la m.....

A+ et merci

 ElpenS
Messages postés
1642
Date d'inscription
samedi 6 novembre 2004
Statut
Modérateur
Dernière intervention
28 avril 2011
3
Quelle ligne exactement te renvoie cette erreur ?

<hr width="100%" size="2" />Nurgle (Antoine)
Messages postés
260
Date d'inscription
vendredi 2 décembre 2005
Statut
Membre
Dernière intervention
3 novembre 2007

Hello,


C'est la ligne dans les propriétés de mon personPanel :


Me.fNameVal.Text = value


Merci

 ElpenS
Messages postés
260
Date d'inscription
vendredi 2 décembre 2005
Statut
Membre
Dernière intervention
3 novembre 2007

En fait, quand je debug, il me met l'erreur a la ligne que je t'ai indiqué avant.


Mais quand je regarde la stack (at personPane.get_FirstName()), 
 la ligne indiquée est la suivante : Return Me.fNameVal.Text


Voilà, encore merci pour tout





 ElpenS