CLR: .Net / Mono / Boo / Otros CLR > ASP .NET
Checkbox En Table
(1/1)
IGarcia:
Hola a todos!! Tengo un problemilla y no se como solucionarlo. Resulta que he creado una tabla dinamicamente(Table) mediante código. Dentro de ella sus filas y sus celdas. Y dentro de cada celda un checkbox.
La tabla sale correctamente, el problema llega cuando quiero coger el Checked de cada checkbox.
Doy al botón "confirmar" y se ejecuta el codigo del Sub que os dejo a continuación:
--- Código: Text ---Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim idcb As String Dim iDia As String Dim iMes As String Dim tam As Integer Dim nombtab As String Dim Ctl As Control For Each Ctl In Page.FindControl("Form1").Controls If TypeOf Ctl Is CheckBox Then If CType(Ctl, CheckBox).Checked Then idcb = CType(Ctl, CheckBox).ID iDia = Mid(idcb, 1, 2) iMes = Mid(idcb, 3, 4) If iMes = "01" Then Label1.Text = iMes Label2.Text = iDia End If End If End If Next End Sub
Pero resulta que no me detecta el checkbox como control del Form sino la table y no se como capturarlo entonces. Me he vuelto loca buscando por la red pero nada.
Agradecería enormemente vuestra ayuda ya que llevo bastante tiempo atascada en este punto. Gracias por anticipado.
Güorker:
Hola,
eso se debe a que los Checkbox no los contiene la página, sino cada celda de la tabla.
Esquematicamente sería algo asi lo de qué control contiene a qué control:
Page
....
Table
Row
Cell
CheckBox
Así que en mi opinión deberías recorrerte la tabla fila por fila, celda por celda y en cada una de ellas mirar si el control que contiene es ChekBox. Pero ten cuidado, ya que puede que el CheckBox no sea el único control que tenga la Celda aunque tu no le hayas añadido nada explicitamente.
Saludos y Suerte
IGarcia:
Gracias por tu respuesta pero me crea la siguiente duda: ¿Y como la recorro? Resulta que si pongo:
--- Código: Text ---For Each Ctl In Page.FindControl("Form1").Controls If TypeOf Ctl Is Table Then nomb = Ctl.ID Label1.Text = nomb End If Next Si que me detecta la tabla y me saca el nombre y eso pero resulta que si añado otro for para recorrer los controls de la tabla:
--- Código: Text ---For Each Ctl In Page.FindControl("Form1").Controls If TypeOf Ctl Is Table Then nomb = Ctl.ID Label1.Text = nomb For Each Ctl2 In Ctl.Controls Next End If Next
Ya no me recoge nada. Además he probado a poner la siguiente linea para ver que tipo de dato me recoge: Ctl2 = Ctl.Controls y resulta que me sale un error dicieb¡ndo que deb ser una coleccion es decir:
--- Código: Text ---Dim Ctl As System.Web.UI.Control'peroDim Ctl2 As System.Web.UI.ControlCollection
Y aun así no me deja recorrelo. Si alguien pudiera echarme una mano....
Gracias por anticipado por vuestro tiempo.
Güorker:
Hola de nuevo,
me imagino que te sabes el nombre de la tabla, verdad?
COmo te he dicho antes recorres todas sus filas, celdas, y controles de cada celda asi:
--- Código: Text --- Dim r As TableRow For Each r In Table1.Rows Dim c As TableCell For Each c In r.Cells Dim Ctl As System.Web.UI.Control For Each Ctl In c.Controls If TypeOf Ctl Is CheckBox Then .......... Next Ctl Next c Next r
Espero que asi lo entiendas.
Aunque para optimizar el codigo, puedes hacer una cosa. Me imagino que en cada fila solo habrá un CheckBox en la celda que sea. puedes acceder a una celda concreta de una fila mediante un indizador:
--- Código: Text --- Dim c As TableCell = r.Cells(N) Donde N será un numero entre 0 y N-1 celdas que tiene la fila.
Y puesdes usar la misma tecnica del indizador para la Colección COntrols de la celda para obtener la referencia del CheckBox.
Saludos
Navegación
Ir a la versión completa