pierro01
Messages postés11Date d'inscriptionmercredi 14 mars 2007StatutMembreDernière intervention 4 mai 2009
-
19 févr. 2009 à 14:06
pierro01
Messages postés11Date d'inscriptionmercredi 14 mars 2007StatutMembreDernière intervention 4 mai 2009
-
24 févr. 2009 à 08:27
Bonjour,
J'ai une page contenant un ContentPlaceHolder dans lequel il y a un UpdatePanel dans lequel on trouve une GridView.
<ContentPlaceHolder id='CPH'>
<GridView id='GV'>
</ContentPlaceHolder>
En gros j'essai de choper en aveugle (sans en connaitre le nom) un control.
Lorsque que je fais :
(GridView)CPH.FindControl("GV")),
j'obtiens bien le control.
Par contre si je fais :
(GridView)CPH.Controls.OfType<GridView>().First(),
je n'obtiens rien, personne au bout du fil.
Je ne me laisse pas démonter, je tente :
UpdatePanel UP = (UpdatePanel)CPH.Controls.OfType().First(),
j'ai l'UpDatePanel, viens ensuite :
(GridView)UP.ContentTemplate.Controls.OfType<GridView>().First(),
et là c'est le drame ... rien non plus !!!
Par contre
(GridView)CPH.Controls.OfType<GridView>().First(),
fonctionne si je sors la GridView de l'UpdatePanel ...
jesusonline
Messages postés6814Date d'inscriptiondimanche 15 décembre 2002StatutMembreDernière intervention13 octobre 201029 20 févr. 2009 à 21:44
Bonjour,
as tu regardé la documentation de OfType ? cette méthode ne permet pas ce que tu veux ! (GridView)cph.FindControl("GV") est la seule solution. Cependant, je ne vois pas pourquoi tu utilises un FindControl.
pierro01
Messages postés11Date d'inscriptionmercredi 14 mars 2007StatutMembreDernière intervention 4 mai 2009 23 févr. 2009 à 11:05
Bonjour,
Merci pour ta réponse ...
J'ai besoin du FindControl parce que je suis dans une classe perso., pas dans le code de la page ...
L'utilisation du OfType aurait pu m'éviter de nommer les controls à utiliser, la règle étant : "tu prends le premier qui passe sans te soucier de son nom" !!!
Mais justement, dans la doc du <OfType> je ne vois pas pourquoi ça fonctionne en dehors de l'UpdatePanel et pas dedans !!!!
jesusonline
Messages postés6814Date d'inscriptiondimanche 15 décembre 2002StatutMembreDernière intervention13 octobre 201029 23 févr. 2009 à 11:58
Si tu regardes la doc de OfType (http://msdn.microsoft.com/en-us/library/bb360913.aspx) ca te dit que cela te caste une collection en un autre type, si par exemple tu as un Object[] qui ne contient que des Person alors le OfType te retournera un IEnumerable. OfType fonctionne avec un curseur (yield return) puisque derriere tu fais un .First() tu ne cast que le premier element de ta collection. quand tu es dans l'updatePanel le premier élément que tu cast est le bon, quand tu es en dehors de l'updatepanel c'est pas le cas donc boom.
pierro01
Messages postés11Date d'inscriptionmercredi 14 mars 2007StatutMembreDernière intervention 4 mai 2009 23 févr. 2009 à 13:11
Nous sommes d'accord, sauf sur la fin, dans mon exemple c'est même le contraire !
Je reprends mon premier schéma :
<ContentPlaceHolder id='CPH'>
<GridView id='GV'>
</ContentPlaceHolder>
Si je fais :
UpdatePanel UP = (UpdatePanel)CPH.Controls.OfType().First();
(GridView)UP.ContentTemplate.Controls.OfType<GridView>().First();
la deuxième instruction plante.
Il trouve bien l'UpdatePanel dans le ContentPlaceHolder, mais pas le GridView dans l'UpdatePanel !!!
jesusonline
Messages postés6814Date d'inscriptiondimanche 15 décembre 2002StatutMembreDernière intervention13 octobre 201029 23 févr. 2009 à 13:46
Ajax n'a rien à voir la dedans.
La méthode OfType n'est pas du tout fait pour ce que tu veux ! si tu veux récuperer le premier control, tu fais un .controls[0] puis un cast, si tu veux récuperer le premier controls de type gridview tu fais un .Where(c => typeof(c) == typeof(GridView)).First(); mais OfType ne sert pas à ca !
Regarde quelle est le premier controle de ContentTemplates.Controls et tu auras la réponse, je ne serais pas étonné de voir qu'il s'agisse d'un LiteralControl.