• Miércoles 15 de Mayo de 2024, 00:18

Autor Tema:  Checkbox En Table  (Leído 1940 veces)

IGarcia

  • Miembro activo
  • **
  • Mensajes: 31
    • Ver Perfil
Checkbox En Table
« en: Miércoles 28 de Diciembre de 2005, 19:42 »
0
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
  1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  2.         Dim idcb As String
  3.         Dim iDia As String
  4.         Dim iMes As String
  5.         Dim tam As Integer
  6.         Dim nombtab As String
  7.         Dim Ctl As Control
  8.         For Each Ctl In Page.FindControl("Form1").Controls
  9.             If TypeOf Ctl Is CheckBox Then
  10.                 If CType(Ctl, CheckBox).Checked Then
  11.                     idcb = CType(Ctl, CheckBox).ID
  12.                     iDia = Mid(idcb, 1, 2)
  13.                     iMes = Mid(idcb, 3, 4)
  14.                     If iMes = "01" Then
  15.                         Label1.Text = iMes
  16.                         Label2.Text = iDia
  17.                     End If
  18.                 End If
  19.             End If
  20.         Next
  21.     End Sub
  22.  

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

  • Miembro MUY activo
  • ***
  • Mensajes: 383
    • Ver Perfil
Re: Checkbox En Table
« Respuesta #1 en: Jueves 29 de Diciembre de 2005, 08:15 »
0
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
[size=109]Ondo ibili, gutxi gastau eta bueltak amari[/size]
[size=109]Pasalo bien, gasta poco y las vueltas a tu madre[/size]

IGarcia

  • Miembro activo
  • **
  • Mensajes: 31
    • Ver Perfil
Re: Checkbox En Table
« Respuesta #2 en: Jueves 29 de Diciembre de 2005, 10:31 »
0
Gracias por tu respuesta pero me crea la siguiente duda: ¿Y como la recorro? Resulta que si pongo:
 
Código: Text
  1. For Each Ctl In Page.FindControl("Form1").Controls
  2.             If TypeOf Ctl Is Table Then
  3.                 nomb = Ctl.ID
  4.                 Label1.Text = nomb
  5.            End If
  6.  Next
  7.  
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
  1. For Each Ctl In Page.FindControl("Form1").Controls
  2.             If TypeOf Ctl Is Table Then
  3.                 nomb = Ctl.ID
  4.                 Label1.Text = nomb
  5.                 For Each Ctl2 In Ctl.Controls
  6.  
  7.                 Next
  8.            End If
  9.  Next
  10.  

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
  1. Dim Ctl As System.Web.UI.Control
  2. 'pero
  3. Dim Ctl2 As System.Web.UI.ControlCollection
  4.  

Y aun así no me deja recorrelo. Si alguien pudiera echarme una mano....
Gracias por anticipado por vuestro tiempo.

Güorker

  • Miembro MUY activo
  • ***
  • Mensajes: 383
    • Ver Perfil
Re: Checkbox En Table
« Respuesta #3 en: Jueves 29 de Diciembre de 2005, 15:23 »
0
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
  1.  
  2. Dim r As TableRow
  3.                 For Each r In  Table1.Rows
  4.                     Dim c As TableCell
  5.                     For Each c In  r.Cells
  6.                         Dim Ctl As System.Web.UI.Control
  7.                         For Each Ctl In c.Controls
  8.                             If TypeOf Ctl Is CheckBox Then
  9.                              ..........
  10.                         Next Ctl
  11.                     Next c
  12.                 Next r
  13.  
  14.  

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
  1.  
  2. Dim c As TableCell = r.Cells(N)
  3.  
  4.  
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
[size=109]Ondo ibili, gutxi gastau eta bueltak amari[/size]
[size=109]Pasalo bien, gasta poco y las vueltas a tu madre[/size]