|
|
|
|
|
#1 -
20/07/2007 11:13:50
|
Reporta abuso
|
Link Permanente
|
|
¿Como se capturan los evetos de los controles creados dinamicamente?
|
|
|
|
|
|
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.
|
|
|
|
|
|
#2 -
07/11/2008 9:04:29
|
Reporta abuso
|
Link Permanente
|
|
RE: ¿Como se capturan los evetos de los controles creados dinamicamente?
|
|
|
gracias excelente me ayudo en el problema
|
|
|
|
|
|
|
#3 -
18/07/2008 17:37:45
|
Reporta abuso
|
Link Permanente
|
|
RE: ¿Como se capturan los evetos de los controles creados dinamicamente?
|
|
|
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,
|
|
|
|
|
|
|
#4 -
25/07/2007 14:08:37
|
Reporta abuso
|
Link Permanente
|
|
RE: ¿Como se capturan los evetos de los controles creados dinamicamente?
|
|
|
OK, perfecto! Me alegra que ya te funcione 
|
|
|
|
|
|
|
#5 -
25/07/2007 12:59:04
|
Reporta abuso
|
Link Permanente
|
|
RE: ¿Como se capturan los evetos de los controles creados dinamicamente?
|
|
|
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
|
|
|
|
|
|
|
#6 -
24/07/2007 17:34:09
|
Reporta abuso
|
Link Permanente
|
|
RE: ¿Como se capturan los evetos de los controles creados dinamicamente?
|
|
|
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
|
|
|
|
|
|
|
#7 -
23/07/2007 18:26:00
|
Reporta abuso
|
Link Permanente
|
|
RE: ¿Como se capturan los evetos de los controles creados dinamicamente?
|
|
|
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"); }
|
|
|
|
|
|
|
#8 -
20/07/2007 15:36:59
|
Reporta abuso
|
Link Permanente
|
|
RE: ¿Como se capturan los evetos de los controles creados dinamicamente?
|
|
|
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
|
|
|
|
|
|
|
#9 -
20/07/2007 12:01:33
|
Reporta abuso
|
Link Permanente
|
|
RE: ¿Como se capturan los evetos de los controles creados dinamicamente?
|
|
|
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!!
|
|
|
|
|