Está en la página 1de 17

Programacin avanzada en .

NET con C#
Servicio de Informtica
CONTROLES DE USUARIO
CONTROLES DE USUARIO
Introduccin
Adems de utilizar controles de servidor We en las !ginas We ASP.NET" !uede crear sus
!ro!ios controles !ersonalizados reutilizales con las mismas t#cnicas $ue !ara crear !ginas
We ASP.NET. Estos controles se denominan controles de usuario.
%n control de usuario es un ti!o de control com!uesto $ue funciona de forma similar a la de
una !gina We ASP.NET& se !ueden agregar controles de servidor We ' marcado a un control
de usuario" as( como definir !ro!iedades ' m#todos !ara el control. A continuacin" !uede
incrustarlos en !ginas We ASP.NET" donde act)an como una unidad.
Controles de Usuario vs Controles personalizados
En ocasiones" es !osile $ue necesite cierta funcionalidad en un control $ue no est incluida en
los controles de servidor We ASP.NET integrados. En estos casos" !uede crear sus !ro!ios
controles. *is!one de dos o!ciones. Puede crear&
Controles de usuario. +os controles de usuario son contenedores en los $ue !uede
colocar controles de formato ' de servidor We. A continuacin !uede tratar el control
de usuario como una unidad ' definir !ro!iedades ' m#todos !ara el mismo.
Controles personalizados. %n control !ersonalizado es una clase escrita !or un
desarrollador $ue se deriva de Control o WebControl.
+os controles de usuario son muc,o ms fciles de crear $ue los controles !ersonalizados" 'a
$ue es !osile reutilizar los 'a e-istentes. Esto !ermite crear con facilidad controles con
elementos de interfaz de usuario com!le.os.
Estructura de los controles de usuario
%n control de usuario We ASP.NET es similar a una !gina We ASP.NET com!leta /arc,ivo
.as!-0 e inclu'e una !gina de interfaz de usuario ' cdigo. El !roceso de creacin del control
de usuario es mu' similar al !roceso de creacin de una !gina ASP.NET" slo $ue al final se
agregan el formato ' los controles secundarios necesarios. Al igual $ue una !gina" un control
1
Programacin avanzada en .NET con C#
Servicio de Informtica
CONTROLES DE USUARIO
de usuario !uede incluir el cdigo necesario !ara mani!ular su contenido e incluso realizar
tareas como el enlace de datos.
%n control de usuario se diferencia de una !gina We ASP.NET en los siguientes as!ectos&
+a e-tensin de nomre de arc,ivo !ara el control de usuario es .asc-.
En lugar de una directiva 2 Page" el control de usuario contiene una directiva 2
Control $ue define la configuracin ' otras !ro!iedades.
+os controles de usuario no se !ueden e.ecutar como arc,ivos inde!endientes. En su
lugar" dee agregarlos a las !ginas ASP.NET" como ,ar(a con cual$uier otro control.
El control de usuario no contiene elementos ,tml" od' o form. Estos elementos deen
estar en la !gina de alo.amiento.
En un control de usuario !uede utilizar los mismos elementos 3T4+ /e-ce!to ,tml" od' '
form0 ' controles We $ue en una !gina We ASP.NET. Por e.em!lo" si est creando un control
de usuario !ara utilizar una arra de ,erramientas" !uede colocar una serie de controles de
servidor We 5utton en el control ' crear controladores de eventos !ara los otones.
En el e.em!lo siguiente se muestra un control de usuario $ue im!lementa un control de
n)mero en el $ue los usuarios !ueden ,acer clic en los otones arria ' aa.o !ara mostrar
varias o!ciones de un cuadro de te-to.
<% @ Control Language="C#" ClassName="UserControl1" %>
<script runat="server">
protected int currentColorIndex
protected !tring"# colors = $"%ed"& "'lue"& "(reen"& ")ello*"+
protected void ,age-Load.o/0ect sender& 1vent2rgs e3
$
i4 .Is,ost'ac53
$
currentColorIndex =
Int167,arse.8ie*!tate""currentColorIndex"#79o!tring.33
+
else
$
currentColorIndex = :
;ispla<Color.3
+
+

protected void ;ispla<Color.3
$
textColor79ext = colors"currentColorIndex#
8ie*!tate""currentColorIndex"# = currentColorIndex79o!tring.3
+

protected void /uttonUp-Clic5.o/0ect sender& 1vent2rgs e3
$
i4.currentColorIndex == :3
$
6
Programacin avanzada en .NET con C#
Servicio de Informtica
CONTROLES DE USUARIO
currentColorIndex = colors7Lengt= > 1
+
else
$
currentColorIndex >= 1
+
;ispla<Color.3
+
protected void /utton;o*n-Clic5.o/0ect sender& 1vent2rgs e3
$
i4.currentColorIndex == .colors7Lengt= > 133
$
currentColorIndex = :
+
else
$
currentColorIndex ?= 1
+
;ispla<Color.3
+
<@script>
<aspA9ext'ox I;="textColor" runat="server"
%eadBnl<="9rue" @>
<aspA'utton Cont>'old="9rue" I;="/uttonUp" runat="server"
9ext="D" BnClic5="/uttonUp-Clic5" @>
<aspA'utton Cont>'old="9rue" I;="/utton;o*n" runat="server"
9ext="v" BnClic5="/utton;o*n-Clic5" @>
Tenga en cuenta $ue el control de usuario es mu' similar a una !gina ASP.NET" 'a $ue
contiene varios controles /un control Te-t5o- ' dos controles 5utton0 ' cdigo $ue controla los
eventos Clic7 de los otones ' el evento +oad de la !gina. Sin emargo" el control no contiene
ning)n formato" e-ce!to !ara los controles" ' en lugar de una directiva 2 Page contiene una
directiva 2 Control.
Crear controles de usuario
+os controles de usuario ASP.NET se crean casi de la misma forma en la $ue se dise8an las
!ginas We ASP.NET. Se !ueden usar los mismos elementos ' controles 3T4+ en un control
de usuario $ue en una !gina ASP.NET estndar. Sin emargo" el control de usuario no tiene
elementos ,tml" od' ni form9 adems" la e-tensin de nomre de arc,ivo dee ser .asc-.
Para crear un control de usuario ASP.NET&
1. Ara el !ro'ecto de sitio We al $ue desee agregar controles de usuario. Si a)n no
tiene ning)n !ro'ecto de sitio We" !uede crear uno.
6. En el men) Sitio We" ,aga clic en Agregar nuevo elemento.
A!arecer el cuadro de dilogo Agregar nuevo elemento.
:
Programacin avanzada en .NET con C#
Servicio de Informtica
CONTROLES DE USUARIO
:. En la o!cin Plantillas instaladas de ;isual Studio del cuadro de dilogo Agregar nuevo
elemento" ,aga clic en Control de usuario We.
<. En el cuadro Nomre" escria un nomre !ara el control.
*e forma !redeterminada" la e-tensin de nomre de arc,ivo .asc- se ane-a al nomre
de control $ue escria.
=. En la lista +engua.e" seleccione el lengua.e de !rogramacin $ue desee utilizar.
>. ?!cionalmente" si desea mantener alg)n cdigo del control de usuario en un arc,ivo
inde!endiente" active la casilla Colocar el cdigo en un arc,ivo inde!endiente.
@. 3aga clic en Agregar.
Se crea el nuevo control de usuario ASP.NET '" a continuacin" se are en el dise8ador.
El cdigo de formato !ara este nuevo control es similar al de una !gina We ASP.NET"
salvo $ue contiene una directiva 2 Control en vez de una directiva 2 Page9 adems" el
control no tiene los elementos ,tml" od' ni form.
Agregue los cdigos de formato ' los controles al nuevo control de usuario" as( como el
cdigo de las tareas $ue realizar el control de usuario" como controlar los eventos del
control o la lectura de los datos desde un origen de datos.
<
Ilustracin 1: Crear un control de usuario
Programacin avanzada en .NET con C#
Servicio de Informtica
CONTROLES DE USUARIO
Incluir controles de usuario
Mediante el diseador
Para agregar un control de usuario ASP.NET a una !gina We se sigue un !roceso !arecido al
de agregar otros controles de servidor. Sin emargo" se dee asegurar de seguir el siguiente
!rocedimiento !ara $ue todos los elementos necesarios se agreguen a la !gina.
1. Ara la !gina We a la $ue desee agregar el control de usuario ASP.NET.
6. Camie a la vista *ise8o.
:. En el E-!lorador de soluciones" seleccione el arc,ivo del control de usuario ' arrstrelo
a la !gina.
El control de usuario ASP.NET se agrega a ella. Adems" el dise8ador crea la directiva
2Aegister" $ue se necesita !ara $ue la !gina reconozca el control de usuario. Ba !uede
traa.ar con las !ro!iedades ' m#todos !)licos del control.
Manualente
1. En la !gina We ASP.NET contenedora" cree una directiva 2 Aegister $ue inclu'a lo
siguiente&
%n atriuto TagPrefi-" $ue !ermite asociar un !refi.o al control de usuario. Este
!refi.o se incluir en la eti$ueta de a!ertura del elemento del control de
usuario.
%n atriuto TagName" $ue !ermite asociar un nomre al control de usuario.
Este nomre se incluir en la eti$ueta de a!ertura del elemento del control de
usuario.
%n atriuto Src" $ue !ermite definir la ruta de acceso virtual al arc,ivo del
control de usuario $ue se va a incluir.
Nota&
El valor del atriuto Src !uede ser una ruta de acceso relativa o asoluta al
arc,ivo de cdigo fuente del control de usuario !artiendo del directorio ra(z de
la a!licacin. Para ma'or fle-iilidad" se recomienda utilizar una ruta de acceso
relativa. El carcter tilde /C0 re!resenta el directorio ra(z de la a!licacin. +os
controles de usuario no !ueden situarse en el directorio A!!DCode.
6. En el cuer!o de la !gina We" declare el elemento de control de usuario dentro del
elemento form.
=
Programacin avanzada en .NET con C#
Servicio de Informtica
CONTROLES DE USUARIO
:. Si el control de usuario e-!one !ro!iedades !)licas" tami#n !uede estalecerlas
mediante declaracin.
Ejemplo
En el e.em!lo siguiente se muestra una !gina We ASP.NET $ue contiene un control de
usuario. Este se encuentra en el arc,ivo S!inner.asc- de la car!eta Controls. En la !gina" el
control se registra !ara $ue utilice el !refi.o uc ' el nomre de eti$ueta S!inner. +as
!ro!iedades 4in;alue ' 4a-;alue del control de usuario se estalecen mediante declaracin.
<%@ ,age Language="C#" %>
<%@ %egister 9ag,re4ix="uc" 9agName="!pinner"
!rc="EFControlsF!pinner7ascx" %>
<=tml>
</od<>
<4orm runat="server">
<ucA!pinner id="!pinner1"
runat="server"
Gin8alue="1"
Gax8alue="1:" @>
<@4orm>
<@/od<>
Convertir p!"inas de #orularios $e% &ors en controles de usuario
Si ,a desarrollado una !gina We ASP.NET ' desea tener acceso a su funcionalidad en toda la
a!licacin" !uede realizar algunos camios menores en la !gina !ara convertirla en un control
de usuario.
'ara convertir una p!"ina $e% AS'(NET de un solo arc)ivo en un control de usuario
1. Camie el nomre del control !ara $ue la e-tensin del nomre de arc,ivo sea .asc-.
6. Fuite los elementos ,tml" od' ' form de la !gina.
:. Camie la directiva 2 Page !or una directiva 2 Control.
<. Fuite todos los atriutos de la directiva 2 Control" e-ce!to +anguage"
AutoEventWireu! /si e-iste0" CodeGile e In,erits.
=. Inclu'a un atriuto className en la directiva 2 Control. Esto !ermite agregar el
control de usuario a una !gina con estalecimiento infle-ile de ti!os.
>
Programacin avanzada en .NET con C#
Servicio de Informtica
CONTROLES DE USUARIO
'ara convertir una p!"ina $e% AS'(NET de cdi"o su%*acente en un control de
usuario
1. Camie el nomre del arc,ivo .as!- !ara $ue la e-tensin del nomre de arc,ivo sea
.asc-.
6. Camie el nomre del arc,ivo de cdigo su'acente !ara $ue tenga la e-tensin de
nomre de arc,ivo .asc-.cs.
:. Ara el arc,ivo de cdigo su'acente ' camie la clase de la $ue ,ereda de Page a
%serControl.
<. En el arc,ivo .as!-" ,aga lo siguiente&
a0 Fuite los elementos ,tml" od' ' form de la !gina.
0 Camie la directiva 2 Page !or una directiva 2 Control.
c0 Fuite todos los atriutos de la directiva 2 Control" e-ce!to +anguage"
AutoEventWireu! /si e-iste0" CodeGile e In,erits.
d0 En la directiva 2 Control" camie el atriuto CodeGile !ara $ue se8ale al
arc,ivo de cdigo su'acente cu'o nomre acaa de camiar.
=. Inclu'a un atriuto className en la directiva 2 Control. Esto !ermite agregar el
control de usuario a una !gina con estalecimiento infle-ile de ti!os.
Ejemplo
En el e.em!lo siguiente se muestra una !gina We ASP.NET de un solo arc,ivo en su formato
original ' el control de usuario resultante des!u#s de convertir la !gina.
<%@ ,age Language="C#" %>
<=tml>
<script runat=server>
void 1nter'tn-Clic5.B/0ect sender& 1vent2rgs e3
$
La/el179ext = "Hi " ? Name79ext ? " *elcome to 2!,7N19I"
+
<@script>
</od<>
<=J> <u>Ke/ Corms ,age<@u> <@=J>
<4orm>
1nter NameA <aspAtext/ox id="Name" runat=server@>
<aspA/utton 9ext="1nter" BnClic5="1nter'tn-Clic5" runat=server@>
</r>
</r>
<aspAla/el id="La/el1" runat=server@>
<@4orm>
<@/od<>
<@=tml>
@
Programacin avanzada en .NET con C#
Servicio de Informtica
CONTROLES DE USUARIO
<%@ Control Language="C#" ClassName="!ampleUserControl" %>
<=J> <u>User Control<@u> <@=J>
<script runat=server>
void 1nter'tn-Clic5.B/0ect !ender& 1vent2rgs e3
$
La/el179ext = "Hi " ? Name79ext ? " *elcome to 2!,7N19I"
+
<@script>
1nter NameA <aspAtext/ox id="Name" runat=server@>
<aspA/utton 9ext="1nter" BnClic5="1nter'tn-Clic5" runat=server@>
</r>
</r>
<aspAla/el id="La/el1" runat=server@>
Crear instancias de controles de usuario AS'(NET ediante
pro"raacin
+a creacin mediante !rogramacin de una instancia de un control de servidor en una !gina
We ASP.NET es mu' similar a la creacin de un control de usuario
Para crear una instancia de un control de usuario mediante !rogramacin
1. En el control de usuario" aseg)rese de $ue la directiva 2 Control contiene un atriuto
ClassName $ue asigna una clase al control de usuario.
En el e.em!lo siguiente se estalece el atriuto ClassName !ara realizar el
estalecimiento infle-ile de ti!os en un control de usuario.
<%@ Control className="G<UserControl" %>
6. En la !gina en la $ue desea traa.ar con el control de usuario" cree una referencia a
dic,o control con la directiva 2 Aeference.
Cuando cree el control de usuario mediante !rogramacin" el ti!o infle-ile !ara dic,o
control estar dis!onile !ara la !gina We ASP.NET slo des!u#s de ,aer creado
una referencia al mismo. Por e.em!lo" el cdigo siguiente crea una referencia a un
control de usuario creado en el arc,ivo 4'%serControl.asc-.
<%@ %e4erence Control="G<UserControl7ascx" %>
H
Programacin avanzada en .NET con C#
Servicio de Informtica
CONTROLES DE USUARIO
:. Cree una variale de instancia !ara el control de usuario" utilizando el nomre de clase
del control. +a clase ser !arte del es!acio de nomres ASP.
Por e.em!lo" si desea crear una instancia del control de usuario declarada como clase
S!inner" dee utilizar sinta-is como la siguiente&
,rotected 2!,7!pinner !pinner1
<. Cree una instancia del control de usuario en el cdigo llamando al m#todo
+oadControl.
=. Asigne los valores de las !ro!iedades seg)n sea necesario '" a continuacin" agregue el
control a la coleccin ControlCollection de un contenedor de la !gina" como un
control Place3older.
Ejemplo
En el e.em!lo siguiente se muestra una !gina We ASP.NET $ue carga un control de usuario
mediante !rogramacin. +a !gina inclu'e una directiva 2 Aeference !ara es!ecificar el
arc,ivo del control. El m#todo +oadControl lee el arc,ivo ' crea una instancia de #ste en forma
de control $ue se !uede agregar a la !gina.
<%@ ,age Language="C#" %>
<%@ %e4erence Control="E@Controls@!pinner7ascx" %>
<script runat="server">
private 2!,7!pinner !pinner1
protected void ,age-Load.o/0ect sender& 1vent2rgs e3
$
!pinner1 = .2!,7!pinner3LoadControl."E@Controls@!pinner7ascx"3
@@ !et Gax8alue 4irst7
!pinner17Gax8alue = L:
!pinner17Gin8alue = 1:
,laceHolder17Controls72dd.!pinner13
+
protected void 'utton1-Clic5.o/0ect sender& 1vent2rgs e3
$
La/el179ext = !pinner17CurrentNum/er79o!tring.3
+
<@script>
<=tml>
<=ead id="Head1" runat="server">
<title>Load User Control ,rogrammaticall<<@title>
<@=ead>
I
Programacin avanzada en .NET con C#
Servicio de Informtica
CONTROLES DE USUARIO
</od<>
<4orm id="4orm1" runat="server">
<div>
<aspA,laceHolder runat=server I;=",laceHolder1" @>
</r @>
<aspA'utton I;="'utton1" runat="server" 9ext="'utton"
BnClic5="'utton1-Clic5" @>
</r @>
</r @>
<aspALa/el I;="La/el1" runat="server" 9ext=""><@aspALa/el>
<@div>
<@4orm>
<@/od<>
<@=tml>
Crear controles de usuario AS'(NET con plantillas
Puede crear controles de usuario $ue im!lementen !lantillas" $ue son una caracter(stica de
ASP.NET $ue !ermite se!arar los datos del control de su !resentacin. +os controles con
!lantilla no !ro!orcionan una interfaz de usuario. En lugar de ello" se escrien !ara $ue
im!lementen un contenedor de nomres e inclu'an una clase a cu'as !ro!iedades ' m#todos
!uede tener acceso la !gina $ue alo.a el control /o !gina ,ost0.
+a interfaz de usuario corres!ondiente al control de usuario la !ro!orciona un desarrollador de
!ginas en tiem!o de dise8o. El desarrollador crea las !lantillas del ti!o definido !or el control
de usuario '" a continuacin" !uede agregar a ellas controles ' formato.
Para crear un control de usuario con !lantillas&
1. En el arc,ivo .asc-" agregue un control Place3older de ASP.NET donde desee $ue
a!arezca la !lantilla.
6. En el cdigo del control de usuario" im!lemente una !ro!iedad de ti!o Item!late.
:. *efina una clase de control de servidor $ue im!lemente la interfaz INamingContainer
como contenedor" en la $ue se crear una instancia de la !lantilla. Esta clase se
denomina contenedor de nomres de la !lantilla.
Nota: El control se convierte sicamente en una clase anidada del control de usuario"
aun$ue esto no es necesario.
<. A!li$ue el atriuto Tem!lateContainerAttriute a la !ro!iedad $ue im!lementa
ITem!late ' !ase el ti!o del contenedor de nomres de la !lantilla como argumento al
constructor de atriutos.
=. En el m#todo Init del control" re!ita los !asos siguientes una o varias veces&
1J
Programacin avanzada en .NET con C#
Servicio de Informtica
CONTROLES DE USUARIO
Cree una instancia de la clase del contenedor de nomres.
Cree una instancia de la !lantilla en el contenedor de nomres.
Agregue la instancia del contenedor de nomres a la !ro!iedad Controls del
control de servidor Place3older.
Nota: *esde el !unto de vista de la !gina $ue utiliza el control de usuario" la
sinta-is del control de usuario con !lantilla es id#ntica a la de un control con
!lantilla !ersonalizado.
Ejemplo
En el e.em!lo siguiente se muestra un control de usuario con !lantilla ' una !gina $ue lo
contiene. El control de usuario crea una !lantilla $ue !uede declararse en una !gina ,ost
como K4essageTem!lateL. El control de !lantilla tami#n e-!one dos !ro!iedades" Inde- '
4essage" a las $ue !uede tener acceso la !gina ,ost dentro de la !lantilla.
En el !rimer e.em!lo se muestra el control de usuario con !lantilla. En el segundo e.em!lo se
muestra una !gina $ue contiene el control de usuario.
<%@ Control language="C#" ClassName="9emplatedUC" %>
<script runat=server>
private I9emplate message9emplate = null
" 9emplateContainer.t<peo4.GessageContainer33 #
pu/lic I9emplate Gessage9emplate $
get
$
return message9emplate
+
set
$
message9emplate = value
+
+
void ,age-Init.3 $
i4 .message9emplate I= null3 $
!tring"# 4ruits = $"apple"& "orange"& "/anana"& "pineapple" +
4or .int i=: i<M i??3
$
GessageContainer container = ne* GessageContainer.i& 4ruits"i#3
message9emplate7InstantiateIn.container3
,laceHolder17Controls72dd.container3
+
+
11
Programacin avanzada en .NET con C#
Servicio de Informtica
CONTROLES DE USUARIO
+
pu/lic class GessageContainerA Control& INamingContainer $
private int m-index
private !tring m-message
internal GessageContainer.int index& !tring message3
$
m-index = index
m-message = message
+
pu/lic int Index $
get
$
return m-index
+
+
pu/lic !tring Gessage
$
get
$
return m-message
+
+
+
<@script>
<aspAplace=older runat=server id=",laceHolder1" @>
<%@ ,age Language="C#" %>
<%@ %egister 9ag,re4ix="uc" tagname="9emplate9est"
!rc="9emplatedUC7ascx" %>
<=tml>
<script runat=server>
protected void ,age-Load.3
$
;ata'ind.3
+

<@script>
<=ead>
<title>9emplated User Control 9est<@title>
<@=ead>
</od<>
<=1>9esting 9emplated User Control<@=1>
<4orm id="Corm1" runat=server>
<ucA9emplate9est runat=server>
<Gessage9emplate>
IndexA <aspALa/el runat="server" I;="La/el1"
9ext=N<%# Container7Index %>N @>
</r @>
GessageA <aspALa/el runat="server" I;="La/elL"
9ext=N<%# Container7Gessage %>N @>
16
Programacin avanzada en .NET con C#
Servicio de Informtica
CONTROLES DE USUARIO
<=r @>
<@Gessage9emplate>
<@ucA9emplate9est>
<@4orm>
<@/od<>
<@=tml>
Acceder a los controles incluidos en un control de usuario
Si tenemos un control de usuario llamado *atosPersonales1 $ue contiene un cam!o de te-to
llamado Te-t5o-Nomre !odemos acceder a todas las !ro!iedades de la ca.a de te-to
mediante el m#todo GindControl.
Por e.em!lo" !ara otener el valor&
((TextBox) DatosPersonales1.FindControl("TextBoxNombre")).Text ;
Pero cuando se crea un control de usuario lo $ue se usca es enca!sular una cierta
funcionalidad !ara ser reutilizado en otras !artes de la a!licacin o incluso en otras
a!licaciones. Por lo $ue no ser(a necesario ni conocer el nomre de los controles incluidos en
este.
Para ello se crean !ro!iedades !)licas !ara acceder a las caracter(sticas del control $ue se
desee. Por e.em!lo si $ueremos $ue se !ueda leer ' modificar el contenido de la ca.a de te-to
de nomre de un control de usuario *atosPersonales" ,aremos lo siguiente en
*atosPersonales.asc-.cs
pu/lic partial class ;atos,ersonales A !<stem7Ke/7UI7UserControl
$
7 7 7
pu/lic string Nom/re
$
get
$
return.9ext'oxNom/re79ext3
+
set
$
9ext'oxNom/re79ext = value
+
+
1:
Programacin avanzada en .NET con C#
Servicio de Informtica
CONTROLES DE USUARIO
+
Con lo cual 'a se !odr leer ' modificar el nomre sim!lemente ,aciendo refer#ncia a esta
!ro!iedad.
Por e.em!lo si en un as!- tenemos una instancia del control de usuario llamada
*atosPersonales1
<uc1A;atos,ersonales I;=";atos,ersonales1" runat="server" @>
!odemos otener el valor de la ca.a de te-to del nomre con&
;atos,ersonales17Nom/re
Eventos de controles de usuario
A la ,ora de crear controles de usuario solemos necesitar ca!turar un evento $ue se !roduce
dentro del mismo" en la !gina !adre. Adems" normalmente" necesitaremos acceder a alguna
de sus !ro!iedades desde la !gina !adre. En el e.em!lo $ue os !resento tenemos un control
de usuario /un uscador0 incrustado en una !gina $ue mostrar los resultados de la
)s$ueda.
Para ello el control de usuario !osee un evento $ue se lanza una vez la )s$ueda ,a finalizado"
adems" los resultados de dic,a )s$ueda se almacenan en una !ro!iedad del control de
usuario $ue recu!era la !gina !ara mostrarlos en un Mrid;ieN.
Pasemos al cdigo. El control de usuario" en su !arte visual se com!one )nicamente de un
Te-t5o- /donde introducir el criterio de )s$ueda0 ' un 5utton /$ue realiza la )s$ueda0.
+a generacin del evento se realiza desde el codeOe,ind&
pu/lic event 1ventHandler 2ceptarClic5ed
protected virtual void BnClic5.o/0ect sender3
$
i4 .t=is72ceptarClic5ed I= null3
1<
Programacin avanzada en .NET con C#
Servicio de Informtica
CONTROLES DE USUARIO
$
t=is72ceptarClic5ed.sender& ne* 1vent2rgs.33
+
+
Este cdigo declara el evento /cu'o nomre ser Ace!tarClic7ed0 e im!lementa el m#todo $ue
invoca el evento.
El cdigo siguiente declara una !ro!iedad !)lica dentro del control donde se almacenarn los
resultados de la )s$ueda.
,rivate List<string> resultados
pu/lic List<string> %esultados
$
get $ return resultados +
set $ resultados = value +
+
En el evento del otn del control de usuario realizamos la llamada al evento !)lico $ue ser
ca!turado !or la !gina&
protected void /tn'uscar-Clic5.o/0ect sender& 1vent2rgs e3
$
@@Hardcode para simular una /OsPueda
t=is7resultados = ne*
List<string>.3
i4 .!tring7IsNullBr1mpt<.t=is7txt,ala/raClave79ext33
$
t=is7resultados72dd."No se =an encontrado resultados"3
+
else
$
t=is7resultados72dd."%esultado1 para " ?
t=is7txt,ala/raClave79ext3
1=
Programacin avanzada en .NET con C#
Servicio de Informtica
CONTROLES DE USUARIO
t=is7resultados72dd."%esultadoL para " ?
t=is7txt,ala/raClave79ext3
+
@@!e invoca el evento pO/lico una veQ la 4unciRn del control =a
terminado
BnClic5.sender3
+
+a !gina dee ca!turar el evento" esto se ,ace de igual forma $ue se ca!tura el evento de un
otn o cual$uier control de .NET. As(" en la !resentacin de la !gina tendremos&
<uc1A'uscador I;="'uscador1"
runat="server" Bn2ceptarClic5ed="'uscador1-2ceptarClic5ed"@ >
As( el m#todo de tratar el evento del control de usuario" dentro de la !gina !adre ser
5uscador1DAce!tarClic7ed ' se codificar as(&
protected
void 'uscador1-2ceptarClic5ed.o/0ect sender& 1vent2rgs e3
$
i4 .t=is7'uscador17%esultados I= null3
$
t=is7(rid8ie*17;ata!ource = t=is7'uscador17%esultados
t=is7(rid8ie*17;ata'ind.3
+
+
1>
Programacin avanzada en .NET con C#
Servicio de Informtica
CONTROLES DE USUARIO
Re#erencia "lo%al a controles de usuario
Si vamos a utilizar en muc,os sitios del !ro'ecto un mismo control de usuario este se !uede
incluir en el We.config en vez de en cada .as!- $ue lo utilice. *e esta forma nos evitamos
tener $ue !oner la eti$ueta 2 Aesgister o 2 Aeference.
<s<stem7*e/>
<pages>
<controls>
<add src="E@Controles@;atos,ersonales7ascx" tagName=";atos,ersonales"
tag,re4ix="uc1" @>
<@controls>
<@pages>
<@s<stem7*e/>
1@

También podría gustarte