Comunicación User Controls ASCX

27/07/2007 - 11:28 por Alhambra Eidos Kiquenet | Informe spam
Hola a todos,

tengo una aplicación web que utiliza ASCX. Tengo una página que tiene varios
ASCX: un user control padre P, que contiene dos user controls hijos: H1 y H2.

La cuestión es que en H1 hay un botón con u n evento Click asociado que
llama al servidor para refrescar datos. En H2 hay un datalist.

Quería refrescar los datos de H2 cuando se pulse el botón en H1.

Cómo puedo detectar desde H2 que se ha pulsado el botón en H1 y así
refrescar en ese momento el datalist ?

Puedo saber desde el user control H2 el origen del postback (el origen sería
el botón de H1) ???

Metiendo una variable en session podría funcionar, pero quería saber si
existen otra opciones. Quizá con HttpContext, Cache, etc...

Agradecería cualquier sugerencia.
Gracias. Saludos.

http://www.alhambra-eidos.es/web2005/index.html
www.kiquenet.net

Preguntas similare

Leer las respuestas

#1 Alberto Poblacion
27/07/2007 - 11:39 | Informe spam
"Alhambra Eidos Kiquenet"
wrote in message news:
tengo una aplicación web que utiliza ASCX. Tengo una página que tiene
varios
ASCX: un user control padre P, que contiene dos user controls hijos: H1 y
H2.

La cuestión es que en H1 hay un botón con u n evento Click asociado que
llama al servidor para refrescar datos. En H2 hay un datalist.

Quería refrescar los datos de H2 cuando se pulse el botón en H1.

Cómo puedo detectar desde H2 que se ha pulsado el botón en H1 y así
refrescar en ese momento el datalist ?



Lo más elegante, para respetar la estructura de controles, sería pasar
de H1 a H2 a través del contenedor P, es decir, que P contenga una rutina de
eventos conectada a su control hijo H1 (que lógicamente deberá hacer
"public" un evento con el Click), y dentro de esa rutina llamar al método
Refrescar de H2 (que lógicamente habrá que crear y hacerlo "public"). En
otras palabras, exactamente lo mismo que harías si H1 y H2 no fueran
controles de usuario sino que fueran controles estándard de asp.net.
Respuesta Responder a este mensaje
#2 Alhambra Eidos Kiquenet
27/07/2007 - 11:52 | Informe spam
Hola, muchas gracias.

tengo definido este evento en H1
protected void btnRefrescar_Click(object sender, EventArgs e)
{
this.RefrescarDatos();
}

Ahora en H1

protected void btnRefrescar_ClickHIJO(object sender, EventArgs e)
{
//Invocar al evento del Padre ???
}


en P

public void btnRefrescar_ClickPADRE(object sender, EventArgs e)
{
// Lanzar evento de H2 ?????
H2.RefrescarDatos();
}

Tendría que definir public event en el Padre y H2, no ? pero cómo accede
desde el H1 al P, cómo lo referencio ?

Muchas gracias de antemano.

Saludos.

http://www.alhambra-eidos.es/web2005/index.html
www.kiquenet.net



"Alberto Poblacion" wrote:

"Alhambra Eidos Kiquenet"
wrote in message news:
> tengo una aplicación web que utiliza ASCX. Tengo una página que tiene
> varios
> ASCX: un user control padre P, que contiene dos user controls hijos: H1 y
> H2.
>
> La cuestión es que en H1 hay un botón con u n evento Click asociado que
> llama al servidor para refrescar datos. En H2 hay un datalist.
>
> Quería refrescar los datos de H2 cuando se pulse el botón en H1.
>
> Cómo puedo detectar desde H2 que se ha pulsado el botón en H1 y así
> refrescar en ese momento el datalist ?

Lo más elegante, para respetar la estructura de controles, sería pasar
de H1 a H2 a través del contenedor P, es decir, que P contenga una rutina de
eventos conectada a su control hijo H1 (que lógicamente deberá hacer
"public" un evento con el Click), y dentro de esa rutina llamar al método
Refrescar de H2 (que lógicamente habrá que crear y hacerlo "public"). En
otras palabras, exactamente lo mismo que harías si H1 y H2 no fueran
controles de usuario sino que fueran controles estándard de asp.net.



Respuesta Responder a este mensaje
#3 Alberto Poblacion
27/07/2007 - 13:51 | Informe spam
"Alhambra Eidos Kiquenet"
wrote in message news:
Tendría que definir public event en el Padre y H2, no ? pero cómo accede
desde el H1 al P, cómo lo referencio ?



Al revés: el evento está en el hijo (H1):

class H1
{
...
public delegate void dlgRefrescar(object sender, EventArgs e);
public event dlgRefrescar HicieronClick;
...
protected void btnRefrescar_Click(object sender, EventArgs e)
{
if (this.HicieronClick!=null)
this.HicieronClick(this, EventArgs.Empty);
}
...
}


El padre se conecta al evento del H1 (imaginate que el H1 en lugar de ser un
control de usuario fuera un botón, y en el padre estuvieras pillando su
Click):

instanciaDeH1.HicieronClick += new
dlgRefrescar(instanciaDeH1_HicieronClick);
...
private void instanciaDeH1_HicieronClick(object sender, EventArgs e)
{
// Lanzar subrutina de H2
H2.RefrescarDatos();
}


Y en H2:

public void RefrescarDatos()
{
...
}
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida