Problème avec la méthode FindControl [Résolu]

Signaler
Messages postés
403
Date d'inscription
vendredi 28 octobre 2005
Statut
Membre
Dernière intervention
31 août 2008
-
Messages postés
403
Date d'inscription
vendredi 28 octobre 2005
Statut
Membre
Dernière intervention
31 août 2008
-
Bonjour,

J'ai un contrôle "CustomPanel" qui hérite de Panel et dans lequel j'essai d'obtenir un autre contrôle de type Image en fonction de son ID. J'ai donc écrit la propriété suivante :

        private Image _ImageControl = new Image();

        public string ImageControlID
        {
            get { return _ImageControl.ID; }
            set { _ImageControl = (Image) ControlUtil.FindTargetControl(value, this, true); }
        }

où ControlUtil.FindTargetControl() est définie comme suit :

    public class ControlUtil
    {
        internal static Control FindTargetControl(string controlID, Control control, bool searchNamingContainers)
        {
            if (searchNamingContainers)
            {
                Control namingContainer = control;
                Control control2 = null;
                while ((control2 == null) && (namingContainer != control.Page))
                {
                    namingContainer = namingContainer.NamingContainer;
                    if (namingContainer == null)
                    {
                        return control2;
                    }
                    control2 = namingContainer.FindControl(controlID);
                }
                return control2;
            }
            return control.FindControl(controlID);
        }
    }

Je l'ai trouvé dans cet article : http://blogs.codes-sources.com/cyril/archive/2007/06/23/la-methode-findcontrol.aspx

Le problème est que la propriété namingContainer de mon controle "CustomPanel" renvoi toujours nul donc FindTargetControl renvoi toujours une valeur nulle.
Sauriez-vous quel est le problème ?

Merci d'avance.
Mathmax

4 réponses

Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
28
Oui, c'est normal

quand tu fais

Cyril - MSP - MCPD ASP.net & MCTS SQL
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
28
oulà attention avec cette bidouille :-)

Tu veux récuperer un controle qui est contenu dans ton panel ? inutile alors d'utiliser cette bidouille, elle sert seulement pour faire une recherche "recursive ascendante" or toi ton controle est à l'interieur de celui où tu recherches.

Si la propriété NamingContainer est toujours à null ca peut vouloir dire 2 choses : la premiere (et la plus probable) tu n'as pas ajouté le control dans la page, comme Panel n'implémente pas INamingContainer et qu'il n'a pas de control parent (puisque tu l'as ajouté null part) alors sa propriété namingcontainer est nulle. L'autre possibilité est au niveau du controle personalisé (plus j'y réfléchis moins je vois comment c'est possible :-p), mais tu as peut etre surchargé une méthode qu'il fallait pas et pas correctement.

<hr />Cyril - MSP - MCPD ASP.net & MCTS SQL
Messages postés
403
Date d'inscription
vendredi 28 octobre 2005
Statut
Membre
Dernière intervention
31 août 2008

Mon contrôle n'est pas dans le Panel. Il peut être n'importe où dans la page. Je n'ai d'ailleurs pas oublié de le mettre dans ma page.

J'ai par contre partiellement résolu le problème en écrivant :

        private Image Img;
        private string _ImageControlID;

        public string ImageControlID
        {
            get { return _ImageControlID; }
            set { _ImageControlID = value; }
        }
        protected override void OnPreRender(System.EventArgs e)
        {
            Img = (Image)ControlUtil.FindTargetControl(_ImageControlID, this, true);
        }

et là ça marche bien. Celà vient du fait que la propriété NamingContainer du Panel, n'est plus nulle quand on l'invoque dans la méthode OnPreRender. Elle est par contre null (tout comme la propriété Page) si on l'utilise dans un set d'une propriété comme je l'ai fait tout à l'heure. Pourquoi ?? J'aimerais bien le comprendre...

Mathmax
Messages postés
403
Date d'inscription
vendredi 28 octobre 2005
Statut
Membre
Dernière intervention
31 août 2008

ok merci.

Mathmax