Findcontrole ne semble pas fonctionné

Résolu
BrokenArrow29 Messages postés 110 Date d'inscription vendredi 1 décembre 2006 Statut Membre Dernière intervention 14 décembre 2011 - 25 juin 2008 à 15:34
BrokenArrow29 Messages postés 110 Date d'inscription vendredi 1 décembre 2006 Statut Membre Dernière intervention 14 décembre 2011 - 26 juin 2008 à 05:58
Bonjour !
suite a une solution qu'on m'a donné sur un dropdownlist, j'essais de trouver mes controles sur ma page avec cette fonction :

Protected
Sub Page_Load(
ByVal sender
As
Object,
ByVal e
As System.EventArgs)
Handles
Me.Load

Dim ddl
As
New DropDownList

Dim ddlc
As
String
Dim rs
As
New ADODB.Recordset

Dim sqlTxt
As
String
Connexion = MySQL_Conn(
"localhost",
"bd",
"root",
"pw")sqlTxt "SELECT * FROM lros WHERE ( team 23 )"
rs = Connexion.Execute(sqlTxt)

For n
As
Integer = 47
To 50
   ddlc =
"DropDownList" & n
    ddl =
CType(Page.FindControl(ddlc), DropDownList)
   dosave(rs,ddl)

Next
End
Sub
____________

"ddl = CType(Page.FindControl(ddlc), DropDownList) "  retourne toujours nothing et pourtant le dropdownlist47 existe bien sur la page..

Ou est mon erreur ? 

Merci

23 réponses

BrokenArrow29 Messages postés 110 Date d'inscription vendredi 1 décembre 2006 Statut Membre Dernière intervention 14 décembre 2011 1
26 juin 2008 à 05:58
Bien voila la solution!
Exactement la masterPage de asp.net change la donne en fouillant avec le findcontrol. En résumé on doit pas l'utilisé  car  les controle dans une masterPage n'est plus sous forme hierarchique dans la page..en tout cas c'est ce que j'ai vue.
En faisant quelques test je me suis rendu compte qu'il faut faire un drill down dans chaque "content" si je sais pas ou se trouve les dropdownlist

Donc je devais fouiller en plusieurs étapes dans mes controles et la ca devenait l'enfer. Je m'en suis sorti avec la methode recursive. Je pense que cette fonction pourra aider bien du monde avec les masterPage (d'ailleur avec toutes les pages). ET la j'obtient mon ddl que je peux sauver. En réalité la fonction Findcontrol aurais du etre récursive au départ pour pas qu'on ait besoin de développer des functions pour réparer une erreur de asp, Merci de ton aide GGTRY j'en ai appris pas mal ce soir!


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







Dim



ddl
As


New

DropDownList



Dim
ddlc

As



String

Dim
rs

As



New
ADODB.Recordset


Dim
sqlTxt

As



String

Connexion = MySQL_Conn(

"localhost"
,

"nhlpc"
,

"root"
,

"delcon"
)sqlTxt "SELECT * FROM lros WHERE ( team 23 )"

rs = Connexion.Execute(sqlTxt)


For
n

As



Integer
= 47

To
50
      ddlc =

"DropDownList"
& n
      ddl = FindControlRecursive(Page.Master, ddlc)

      dosave(ddl,rs)

Next
















End



Sub






Private



Function
FindControlRecursive(

ByVal
rootControl

As
Control,

ByVal
SearchString

As



String
)

As
Control


If
(rootControl.ID = SearchString)

Then
      
Return
rootControl


End



If






For



Each
ctl

As
Control

In
rootControl.Controls
         

Dim
ControlWanted

As
Control
         ControlWanted = FindControlRecursive(ctl, SearchString)
         

If



Not
(ControlWanted

Is



Nothing
)

Then

                     Return
ControlWanted


          End



If

Next

Return



Nothing



End



Function
3
Gastaropod Messages postés 10 Date d'inscription vendredi 30 novembre 2007 Statut Membre Dernière intervention 26 juin 2008
25 juin 2008 à 15:51
Essaye juste avec "n"

ddl = CType(Page.FindControl(n), DropDownList)<gras></gras>
0
BrokenArrow29 Messages postés 110 Date d'inscription vendredi 1 décembre 2006 Statut Membre Dernière intervention 14 décembre 2011 1
25 juin 2008 à 16:04
Toujours le meme chose ...il retourne Nothing...

??????
0
Gastaropod Messages postés 10 Date d'inscription vendredi 30 novembre 2007 Statut Membre Dernière intervention 26 juin 2008
25 juin 2008 à 16:16
A quel moment tu crées tes dropdownlists ?

Peut-être qu'il retourne nothing parce qu'il ne sont pas encore initialisés, puisqu'aparemment, tu n'en es encore qu'au load, et rien n'indique que tu as initialisé des dropdownlists
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BrokenArrow29 Messages postés 110 Date d'inscription vendredi 1 décembre 2006 Statut Membre Dernière intervention 14 décembre 2011 1
25 juin 2008 à 16:30
J'ai déplacer les instructions dans un evenement button_click. Toujours la meme chose..
Je suis vraiment embêté. Est possible que les dropdownlist ne sont pas trouvé a cause qu'il sont entre des 
  ????
0
Gastaropod Messages postés 10 Date d'inscription vendredi 30 novembre 2007 Statut Membre Dernière intervention 26 juin 2008
25 juin 2008 à 16:39
Comment crées-tu tes dropdownlist?

Est-ce que tu les crée par exemple dans la page .aspx, dans une boucle for? (par exemple, autant de dropdownlist que d'utilisateurs)
0
BrokenArrow29 Messages postés 110 Date d'inscription vendredi 1 décembre 2006 Statut Membre Dernière intervention 14 décembre 2011 1
25 juin 2008 à 16:57
Le site est une ligue d'hocker simulé. Il sont creer tous au départ. Ils sont dans la page dan une table a l'interrieur de cellule. Il a environ 50 et plus de dropdownlist relie a une seul datasource. Le but de la page est de selectionner le joueur qui va joué sur un ligne. Chaque joueur sur une ligne est representé par un ddl. il ya 5 joueurs par ligne et il ya environ 14 lignes différentes (powerplay, penality kill etc). Donc je me retrouve avec beaucoup de ddl. Mais ils sont tous créer au départ. il ya pas de creation ddl apres le load.
0
Gastaropod Messages postés 10 Date d'inscription vendredi 30 novembre 2007 Statut Membre Dernière intervention 26 juin 2008
25 juin 2008 à 17:05
Si ce sont des composants asp il est compliqué de les créer en dynamique dans la page .aspx

Tu ferais mieux de les créer dans le page_load justement en leur attribuant un identifiant dans une boucle for

Comme ça :

For i As Int32 = 0 to 'le nombre de tes ddl à créer
    Dim ddl As New DropDownList
    ddl.ID = "ddl" & i
    'le reste de ton code pour chaque ddl
Next

Là au moins tu seras sûr de l'ID qui sera généré
0
ggtry Messages postés 417 Date d'inscription vendredi 13 juin 2008 Statut Membre Dernière intervention 21 juillet 2010 1
25 juin 2008 à 17:22
Bonjour,

Pour le code que tu donnes au tout début : tu devrais essayer en mettant au début un test pour savoir si ta page est postback ou non.

If Page.IsPostBack = True Then
...
End if

Cordialement,
0
BrokenArrow29 Messages postés 110 Date d'inscription vendredi 1 décembre 2006 Statut Membre Dernière intervention 14 décembre 2011 1
25 juin 2008 à 17:59
Pour le ispostback...je n'en ai pas besoin vue que j'ai déplacer le code sur un evenement Button_click

Mais je ne cromprend plus rien car en fesant un test de trouver mon SqldataSouce1.. le findcontrole ne le trouve pas non plus!!!!

Page.Findcontrole me retourne toujours nothing  ... pourtant sur la page design ils sont tous la (ddl + sqldatasource)
0
ggtry Messages postés 417 Date d'inscription vendredi 13 juin 2008 Statut Membre Dernière intervention 21 juillet 2010 1
25 juin 2008 à 18:43
Quel est exactement le message d'erreur ?
Et sur quelle ligne ?

GGtry
0
BrokenArrow29 Messages postés 110 Date d'inscription vendredi 1 décembre 2006 Statut Membre Dernière intervention 14 décembre 2011 1
25 juin 2008 à 19:28
ce n'est pas un msg d'erreur mais c'est que le findcontrole retourne toujours "Nothing"
0
ggtry Messages postés 417 Date d'inscription vendredi 13 juin 2008 Statut Membre Dernière intervention 21 juillet 2010 1
25 juin 2008 à 20:00
Je ne comprends pas très bien.
Si dans la procédure du buttonclick tu essaies de remplir un label avec ddl.selecteditem.text, ça marche, non ?
Le problème se pose apparemment ailleurs que dans le code que tu donnes.
Qu'est censé faire ton DoSave ?

GGtry
0
BrokenArrow29 Messages postés 110 Date d'inscription vendredi 1 décembre 2006 Statut Membre Dernière intervention 14 décembre 2011 1
25 juin 2008 à 20:43
Je réexplique le problème: c'est que la variable ddl ne pointe jamais au dropdownlist que je cherche. elle possede toujours la valeur nothing meme apres avoir  "ddl = CType(Page.FindControl(ddlc), DropDownList)"passer par cette commande. C'est comme ci le findcontrol n'a pas trouvé l'objet.











Dim ddl As New DropDownList
Dim ddlc As


String

Dim rs As New ADODB.Recordset
Dim sqlTxt As


String
Connexion = MySQL_Conn("localhost", "bd", "root", "pw")sqlTxt "SELECT * FROM lros WHERE ( team 23 )"
rs = Connexion.Execute(sqlTxt)
For n AsInteger = 47 To 50
   ddlc = "DropDownList" & n
   ddl = CType(Page.FindControl(ddlc), DropDownList)
   dosave(rs,ddl)






Next
0
ggtry Messages postés 417 Date d'inscription vendredi 13 juin 2008 Statut Membre Dernière intervention 21 juillet 2010 1
25 juin 2008 à 21:53
Bonsoir,

Très franchement, je ne vois pas comment il pourrait se faire, si tu as bien des contrôles nommés DropDownList47, DropDownList48, etc., que ddl soit nothing.
Comment sais-tu que ddl est nothing si tu n'as pas d'erreur ?
C'est ça que je voudrais savoir, car sinon, ton problème me semble difficilement explicable.
Tu ne dis pas d'ailleurs ce que fait ton doSave...

GGtry
0
BrokenArrow29 Messages postés 110 Date d'inscription vendredi 1 décembre 2006 Statut Membre Dernière intervention 14 décembre 2011 1
25 juin 2008 à 22:15
Assez simple....ddl est égale a nothing car je le suis pas a pas au debugeur. Et en plus dans la fenetre espion je suis aussi les valeur de PAGE. Et si je fouille a l'interrieur des valeur de Page bien je vois tous mes dropdownlist ...c'est assez bizarre que findcontrole les trouves pas je les vois quand j'explore les valeurs de "Page". C'est a n'y rien comprendre.

Dosave n'est pas important il sauvegarde la valeur qui a été sélectionné dans le drowdownlist selon le id de celui il correspond a un champs dans la table LROS. Mais ca fonctionne bien si j'ai une valeur dans ddl mais la le probleme c'est qu'il la trouve pas et pourtant comme j'ai mentionné ci-haut je la voie tres bien en explorant les valeur de PAGE dans la fenetre espion.
0
BrokenArrow29 Messages postés 110 Date d'inscription vendredi 1 décembre 2006 Statut Membre Dernière intervention 14 décembre 2011 1
25 juin 2008 à 22:19
Merci de ton aide ....mais ca ressemble plus a un bug de asp.net ...tout devrais fonctionner comme tu vois ... je vais faire un test avec moins de ddl pour voir si c'est pas ca qui le fait "Bad tripper"
0
ggtry Messages postés 417 Date d'inscription vendredi 13 juin 2008 Statut Membre Dernière intervention 21 juillet 2010 1
25 juin 2008 à 22:23
Pour faire plus concret, je donne un exemple qui marche (je viens de le tester) où se trouvent récupérés dans la boucle for des labels et des dropdownlist qui correspondent :

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs)
        Dim ddl As DropDownList
        Dim ddlc As String
        For n As Integer = 47 To 50
            ddlc = "dropdownlist" & n
            Dim lbc As String = "Label" & n
            ddl = CType(Page.FindControl(ddlc), DropDownList)
            Dim lb As Label = CType(Page.FindControl(lbc), Label)
            DoSave(ddl, lb)
        Next
    End Sub

Sub DoSave(ByVal ceci As Object, ByVal cela As Object)
        cela.Text = ceci.selecteditem.text
    End Sub

Si cela ne marche pas chez toi, je ne comprends pas pourquoi...

GGtry
0
ggtry Messages postés 417 Date d'inscription vendredi 13 juin 2008 Statut Membre Dernière intervention 21 juillet 2010 1
25 juin 2008 à 22:36
Non, le nombre de ddl n'est pas le problème.
Mais si tu testes sans suivre pas à pas, avec un déboguage tout simple, que se passe-t-il ?

GGtry
0
BrokenArrow29 Messages postés 110 Date d'inscription vendredi 1 décembre 2006 Statut Membre Dernière intervention 14 décembre 2011 1
25 juin 2008 à 22:46
Ben voila,
ca ne marche pas plus...
je pense de plus en plus au nombre de dropdownlist ...(68 au total). ...est-ce ca le problème ????
Ma page fonctionne sous une masterPage ...est-ce ca le problème ?????

Je vais prendre un peu de recule et regarder tout de nouveau ...je comprend vraiment pas où est le probleme

Je reviens plus tard dans la soirée avec j'espère la solution!!!...(pour moi il est 16h44)

Merci de ton aide...
0
Rejoignez-nous