Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Recorrer tablas HTML

552 views
Skip to first unread message

David

unread,
Feb 22, 2008, 4:34:32 PM2/22/08
to
Microsoft Visual Studio .NET
Visual Baic .NET
ASP .NET

Muy buenas, ¿alguien lo necesitó antes que yo?:

Del lado del Servidor "construyo una tabla" HTML para luego "inyectarla" en
la página ASP.NET
El resultado final es una cadena del tipo:

aux ="<TABLE>filas y columnas con datos <TR>....</TABLE>"

Bien, hasta aquí sin problemas, PERO, necesito comprobar si alguna/s
columna/s están vacias

¿Cómo recorrer una tabla almacenada en una cadena para comprobar si alguna/s
columna/s están vacias PARA ELIMINAR ESA/S COLUMNA/S de la tabla?

?¿?¿?¿?¿¿? :-(

Segundo Serrano

unread,
Feb 22, 2008, 6:07:25 PM2/22/08
to
Hola David,
podrías usar un control como el gridview para mostrar tu tabla, por poner un ejemplo (puede ser otro).
pasos:
1.-  creas un datatable al vuelo con las columnas que necesitas y un array de variables de tipo boolean, que guardarán la informaci´no de si la columna dada tiene o no valores.

Dim rowsCOUNT As Integer = 5

Dim columnsCOUNT As Integer = 4

Dim arrFlags() As Boolean

Dim dt As New DataTable

dt.Columns.Add(

"A", GetType(String))

dt.Columns.Add(

"B", GetType(String))

dt.Columns.Add(

"C", GetType(String))

dt.Columns.Add(

"D", GetType(String))

dt.Columns.Add(

"E", GetType(String))

ReDim Preserve arrFlags(columnsCOUNT)
2.- Cargas la data al mismo tiempo que vas preguntando si tiene valor:

For i As Integer = 1 To rowsCOUNT

Dim row As DataRow = dt.NewRow

For j As Integer = 0 To columnsCOUNT

'Aquí preguntas si tiene valor, y le pones true si es así

Dim The_value As String = "aqui va tu texto"

If The_value <> String.Empty Then arrFlags(j) = True Else arrFlags(j) = False

row(j) = The_value

Next j

dt.Rows.Add(row)

Next i

GridView1.DataSource = dt

3.- Finalmente, determinas cuáles columnas debes ocultar:

'de esta manera estarías ocultando las columnas vacías

For j As Integer = 0 To columnsCOUNT

GridView1.Columns(j).Visible = arrFlags(j)

Next j

GridView1.DataBind()

Cualquier cosa, comentas?

Segundo Serrano P.
Sistemas
JABSOFT
Blog: http://dotnet-peru.blogspot.com
511-91974975
511-2428802
------------------------------------------------------
"David" <dgir...@hotmail.com> escribió en el mensaje de noticias news:efmJ4qZd...@TK2MSFTNGP03.phx.gbl...

Jose A. Fernandez

unread,
Feb 22, 2008, 7:20:41 PM2/22/08
to
Hola David
Agregando a lo que te comenta Segundo Serrano pero con un objeto TABLE
de HTML que en .NET tienes la clase HTMLTable que hace referencia.

Para recorrer la tabla primeramente tienes que tener el objeto
HtmlTable para empezar a recorrerlo, como tu estas creando lo debes
tener en el alguna variable sino es asi guardalo.
Pero si no lo tienes tendras que buscar este table en el codigo
mediante su id.. (su id del servidor) o sea algo asi:
Dim t as htmlTable = Ctype(me.FindControl("IdTable"), HtmlTable)
Si no tienes algo asi, porque dices que lo "creas" entonces tendras de
antemano un objeto que es una instancia de la clase HTMLTable
SI NO LO TIENES y veo que un ejemplo nos das algo asi
aux ="<TABLE>..."
Esto como veras no es una TABLA, sino una cadena (un simple string),
parsear esto a una tabla es un poco "artesanal"
Puedes armar la tabla con HtmlTable, HtmlTableRow, HtmlTableCell??? Te
seria mucho mas facil (y es mi recomendacion).. va si puedes no tienes
que armarla ya que tienes en ASP.NET 2.0 el webcontrl GRIDVIEW que se
enlaza a datos (sean vacios o no en sus celdas de filas) y se
renderiza a TABLE en el cliente

Pero si ya lo tienes como te comentaba, solo tienes que ir
"recorriendo" en sus colecciones especificas que tiene este control

Private SubTablaRecorrer(ByVal t As HtmlTable)
Dim f As HtmlTableRow
Dim c As HtmlTableCell

For Each f In t.Rows
For Each c In f.Cells
c.InnerHtml = c.InnerHtml & "."
Next
Next
End Sub
(tambien puedes preguntar si es vacio por esta
propiedad .innerHTML.Trim = "")
Pero en innerHTML es el contenido en HTML puedes coloca por ejemplo
"<b>Hola Mundo!</b>" para que se mostrar el texto en negrita, si en
cambio necesitas agregar un control (y me imagino que un control del
lado del servidor) puedes hacer esto y agregar ducho contor(culaquiera
que quieras a la celda mediante su coleccion de controles...
For Each f In t.Rows
For Each c In f.Cells
Dim txt As New TextBox
c.Controls.Add(txt)
Next
Next


Espero que te sirva de ayuda o guia
______________________
Jose A. Fernandez
blog: http://geeks.ms/blogs/fernandezja

On 22 feb, 21:07, "Segundo Serrano" <sserrano[at]jabs[dot]com[dot]pe>
wrote:

> "David" <dgiro...@hotmail.com> escribió en el mensaje de noticiasnews:efmJ4qZd...@TK2MSFTNGP03.phx.gbl...

David

unread,
Feb 24, 2008, 1:43:05 PM2/24/08
to
Gracias por contestar.

Las alternativas las había sopesado, pero implicaba recodificar todo el
"tinglado" de montar la tabla, únicamente era por si alguien había
"parseado" un cadena que conteniera una tabla HTML ("<TABLE>......</TABLE>")
para suprimir columnas con todas sus celdas "vacías".

En fin gracias de todos modos!!!

Jhonny Vargas P.

unread,
Feb 25, 2008, 6:15:35 AM2/25/08
to
> For Each f In t.Rows
> For Each c In f.Cells
> Dim txt As New TextBox
> c.Controls.Add(txt)
> Next
> Next
>

Y para leer estos controles debes "crearlos" en el evento "Page_Init"....


--
Saludos,
Jhonny Vargas P.
http://msmvps.com/jvargas
Santiago de Chile

0 new messages