Mensaje dentro de Principiantes

¿Como se capturan los evetos de los controles creados dinamicamente?

Responder 
#1 - 20/07/2007 11:13:50 Reporta abuso | Link Permanente
Javier Santamaria Hombre
Fecha de registro: 02/05/2007
0 post en este tema
188 posts en principiantes
194 posts en todos los foros
¿Como se capturan los evetos de los controles creados dinamicamente?

Responder Citar
Hola,

Tengo el siguiente problemilla:

Al crear los controles dinamicamente no puedo crear procedimientos que
manejen sus eventos, ya que al no estar declarados estaticamente no se
reconocen. Es decir, yo dinamicamente me creo un control llamado
"RdoLeadtbl3", pero no puedo definir en mi archivo .aspx.vb un procedimiento
que sea:

Protected Sub RdoLeadtbl3_CheckedChanged(ByVal sender As Object, ByVal e As
System.EventArgs) Handles RdoLeadtbl3.CheckedChanged

Esto me dice que no se puede compilar, porque no esta definido RdoLeadtbl3
(recordad que lo defino en ejecucion). Por tanto mi problema es: yo voy
añadiendo pasajeros a una tabla de forma dinamica. De estos pasajeros solo uno puede ser
principal. Esto obviamente lo controlo con unos RadioButton (no puede ser
RadioButtonList porque quiero un boton por fila y no una lista de botones por
fila). El problema que me encuentro es que no se como capturar el evento
CheckedChanged de estos RadioButton para cambiar el pasajero principal segun
se seleccione uno u otro. Actualmente me pone el puntito en todos los que
pinches y lo que deberia de hacer es cambiarlo. Por tanto la pregunta es:

¿Como se capturan los evetos de los controles creados dinamicamente?

Agradezco cualquier ayuda.

Un saludo.
Volver arriba

Respuestas
Mostrar de en 15
#2 - 07/11/2008 9:04:29 Reporta abuso | Link Permanente
juan pablo
Usuario no registrado
RE: ¿Como se capturan los evetos de los controles creados dinamicamente?

Responder Citar


gracias excelente me ayudo en el problema
Volver arriba

#3 - 18/07/2008 17:37:45 Reporta abuso | Link Permanente
Emmanuel
Usuario no registrado
RE: ¿Como se capturan los evetos de los controles creados dinamicamente?

Responder Citar
Como es que hiciste yo tengo el mismo problema! pero en c# y con el componente DropDownList.

No puedo hacer que salte a las lineas del manejador!!
Osea no me ejecutta las acciones cuando yo cambio una opcion del DropDownList,

Volver arriba

#4 - 25/07/2007 14:08:37 Reporta abuso | Link Permanente
subgurim
Fecha de registro: 01/12/2006
1 post en este tema
542 posts en principiantes
1777 posts en todos los foros
RE: ¿Como se capturan los evetos de los controles creados dinamicamente?

Responder Citar
OK, perfecto!
Me alegra que ya te funcione
Volver arriba

#5 - 25/07/2007 12:59:04 Reporta abuso | Link Permanente
Javier Santamaria Hombre
Fecha de registro: 02/05/2007
1 post en este tema
188 posts en principiantes
194 posts en todos los foros
RE: ¿Como se capturan los evetos de los controles creados dinamicamente?

Responder Citar
Hola de nuevo, ya funciona. el unico problema (que yo le he visto) era que yo añadia el manejador de eventos en un procedimiento mio. Al hacer esto cuando volvia a llamar a la pagina ese manejador se perdia en el page_load (supongo que cargaria los eventos por defecto, en mi caso niguno al ser controles dinamicos).
Por tanto me he creado un procedimiento para añadir los manejadores al que llamo desde el page_load. Este procedimiento añade los manejadores para todos los controles dinamicos que se usan en esta ejecucion.
Si alguien necesita mas informacion lo explico mas detalladamente, pero el problema no era de codigo, era de ubicacion.

Saludos
Volver arriba

#6 - 24/07/2007 17:34:09 Reporta abuso | Link Permanente
Javier Santamaria Hombre
Fecha de registro: 02/05/2007
1 post en este tema
188 posts en principiantes
194 posts en todos los foros
RE: ¿Como se capturan los evetos de los controles creados dinamicamente?

Responder Citar
Hola subgurim, gracias por responder.

La traduccion de tu codigo entre VB.NET y C# seria algo asi:

protected void Page_Load(object sender, EventArgs e)
    {
        RadioButton1.CheckedChanged += new EventHandler(RB_CheckedChanged);
Añado el manejador
        RadioButton1.AutoPostBack = true;
    }

protected sub page_load (byval sender as object, byval e as eventargs)
    AddHandler radiobutton1.CheckedChanged, AddressOf RB_CheckedChanged Añado el manejador
    radiobutton1.autopostback=true
end sub


protected void RB_CheckedChanged(object sender, EventArgs e) Procedimiento de manejo del evento
    {
        Response.Write("Hola");
    }

protected sub
RB_CheckedChanged (byval sender as object, byval e as eventargs) Procedimiento de manejo del evento
    response.write("Hola")
end sub


Ahora te pongo un poquito de mi codigo para que veas que lo hago igual:

Private Sub AddNewRow (byRef table as Table)
...
Dim rdolead As New RadioButton
AddHandler rdolead.CheckedChanged, AddressOf LeadCheckedChanged 
Añado el manejador
rdolead.AutoPostBack = True
...
End Sub

Private Sub LeadCheckedChanged(ByVal sender As Object, ByVal e As EventArgs) 
Procedimiento de manejo del evento
Dim i As Integer
Dim c As TableCell
Dim con As RadioButton
For i = 1 To TblPassengers.Rows.Count - 1
c = TblPassengers.Rows.Item(i).Cells.Item(0)
con = c.FindControl("RdoLeadtbl" & i.ToString)
con.Checked = False
Next
Dim rdo As RadioButton
rdo = DirectCast(sender, RadioButton) 
Aqui se parsea el tipo de objeto que llama al manejador
rdo.Checked = True
End Sub


Pues esto aparentemente tan sencillo no funciona. El problema es que ni siquiera entra en el procedimiento que maneja el evento, no es qeu entre y me de algun error es que los botones se seleccionan, pero el evento no salta.

Tambien tengo dos lineas comentadas por ahi que lo lei de un tutorial, pero sin comentarlas tampoco funciona.
Las lineas son:
'Private Delegate Sub LeadEventHandler(ByVal sender As Object, ByVal e As EventArgs)
'Private Event CheckedChanged As LeadEventHandler


Por ultimo decir que tambien he probado con el atributo
AutoEventWireup = "true" y AutoEventWireup = "false" de la pagina ".aspx", y tampoco funciona.

A ver si damos con ello. Gracias de nuevo.

Saludos

Volver arriba

#7 - 23/07/2007 18:26:00 Reporta abuso | Link Permanente
subgurim
Fecha de registro: 01/12/2006
1 post en este tema
542 posts en principiantes
1777 posts en todos los foros
RE: ¿Como se capturan los evetos de los controles creados dinamicamente?

Responder Citar
Hola!

Voy un poco mal de VB.NET (espero que tú no vayas mal de C#, ejeje).

Este código me funciona para el RadioButton:

    protected void Page_Load(object sender, EventArgs e)
    {
        RadioButton1.CheckedChanged += new EventHandler(RB_CheckedChanged);
        RadioButton1.AutoPostBack = true;
    }

    protected void RB_CheckedChanged(object sender, EventArgs e)
    {
        Response.Write("Hola");
    }

Volver arriba

#8 - 20/07/2007 15:36:59 Reporta abuso | Link Permanente
Javier Santamaria Hombre
Fecha de registro: 02/05/2007
1 post en este tema
188 posts en principiantes
194 posts en todos los foros
RE: ¿Como se capturan los evetos de los controles creados dinamicamente?

Responder Citar
Hola subgurim, gracias por la respuesta y por el articulo.
Avanzando un poquito mas, ya consigo meter el evento en el RadioButton, pero no salta.

Pongo el codigo para qeu me digas que puedo estar haciendo mal:

Este es el procedimiento donde trato el evento (lo que hace es vaciar todos
los radiobutton de la tabla para luego marcar el que me ha lanzado el evento):
**********************************************************
Private Sub LeadCheckedChanged(ByVal sender As Object, ByVal e As EventArgs)
Dim i As Integer
Dim c As TableCell
Dim con As RadioButton
For i = 1 To TblPassengers.Rows.Count - 1
c = TblPassengers.Rows.Item(i).Cells.Item(0)
con = c.FindControl("RdoLeadtbl" & i.ToString)
con.Checked = False
Next
Dim rdo As RadioButton
rdo = DirectCast(sender, RadioButton)
rdo.Checked = True
End Sub
**********************************************************

Y este es el procedimiento donde agrego el RadioButton con su evento:
**********************************************************
Private Sub AddNewRow(ByRef table As Table)
Dim emptyrow As New TableRow

Dim lead As New TableHeaderCell
Dim rdolead As New RadioButton
rdolead.ID = "RdoLeadtbl" & table.Rows.Count.ToString
AddHandler rdolead.CheckedChanged, AddressOf LeadCheckedChanged
rdolead.AutoPostBack = True
lead.Controls.Add(rdolead)
emptyrow.Cells.Add(lead)
...
**********************************************************

Tambien tenia estas dos lineas, pero las comente y sigue compilando igual:
**********************************************************
'Private Delegate Sub LeadEventHandler(ByVal sender As Object, ByVal e As
EventArgs)

'Private Event CheckedChanged As LeadEventHandler
**********************************************************

De todas formas no funciona ni con ellas comentadas ni sin comentar.

Muchas gracias de nuevo. A ver si solucionamos este tema.

Un saludo
Volver arriba

#9 - 20/07/2007 12:01:33 Reporta abuso | Link Permanente
subgurim
Fecha de registro: 01/12/2006
1 post en este tema
542 posts en principiantes
1777 posts en todos los foros
RE: ¿Como se capturan los evetos de los controles creados dinamicamente?

Responder Citar
Hola Javier,

tus preguntas alcanzan un nivel muy bueno!!

En el siguiente artículo se explica como asignar eventos a Botones creados en ejecución, pero aplicarlo a lo que tú quieres no debe costarte mucho.

Cuando lo hayas solucionado nos cuentas cómo!!
Volver arriba
Mostrar de en 15

Hospedado en domitienda