Hero

Como buscar un control dentro de otro control en ASP.NET

Junio 11, 2013

aisen
.Net
ASP.Net

Les ha pasado alguna vez que necesitan acceder a un control desde código pero no pueden ya que este control se encuentra ubicado dentro de otro control.

Desde código solo podemos acceder a los controles principales que se encuentran en la página pero si tenemos un control dentro de otro cuando intentamos llamarlo desde código no podemos porque no es accesible directamente.

La solución es buscar dentro del control padre el control hijo que necesitemos.

  1. Código ASP.

Tenemos un control listview y dentro de este un control label, desde código directamente solo podremos acceder al control listview pero no al label por lo cual tenemos que buscar la manera de poder acceder a este.

<asp:ListView ID="lsvPrueba" runat="server">
        <LayoutTemplate>
            <asp:PlaceHolder ID="itemPlaceholder" runat="server"></asp:PlaceHolder>
        </LayoutTemplate>

        <ItemTemplate>
                <div>
                    <asp:Label ID="lblPrueba" runat ="server" Text="Prueba busqueda de control"></asp:Label>
                </div>
        </ItemTemplate>

<ItemSeparatorTemplate>
</ItemSeparatorTemplate>
</asp:ListView>

2 . Crear función.

Creamos una función para buscar el control.

        /// <summary>
        /// Funcion para buscar controles dentro de otro
        /// </summary>
        /// <param name="pForm">Formulario o pagina</param>
        /// <param name="pControlPadre">Control Padre</param>
        /// <param name="pControlNombre">Control a Buscar</param>
        /// <returns></returns>
        private Control BuscarControl(Control pForm, Control pControlPadre, string pControlNombre)
        {
            if (pControlPadre.ID == pControlNombre)
            {
                //Retornamos el control si es igual al control padre
                return pControlPadre;
            }

            //Recorremos los controles que hayan dentro del control padre
            foreach (Control subControl in pControlPadre.Controls)
            {
                Control resultado = BuscarControl(pForm, subControl, pControlNombre);
                if (resultado != null)
                {
                    //Retornamos el control que estamos buscando
                    return resultado;
                }
            }

            //Sino lo encuentra retornamos nulo
            return null;
        }
  1. Buscar el control.

Tenemos que crear un control label desde código, dicho control es el que utilizaremos para modificar las propiedades del label del ASP; Ahora llamamos a la función BuscarControl y le pasamos los parámetros, si encontramos el control a buscar ponemos que sea igual al label creado para este uso.

            //Label que utilizaremos
            Label vlLabel;

            //Llamamos a la funcion y le pasamos los parametros
            Control vlLabelPrueba = BuscarControl(this.Page, lsvPrueba, "lblPrueba");

            //Si el resultado es diferente de nulo
            if(vlLabelPrueba != null)
            {
                //El label que utilizaremos es igual al label que mandamos a buscar
                vlLabel = (Label)vlLabelPrueba;
                //Modificamos el texto
                vlLabel.Text = "Texto de label modificado";   
            }

Con el código anterior ya podemos modificar las propiedades del control.

Espero les sea de ayuda.

Recibe consejos y oportunidades de trabajo 100% remotas y en dólares de weKnow Inc.