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

[0] Índice de Mensajes

Ir a la versión completa