Tabla html con net

Iniciado por Lekim, 7 Abril 2016, 14:38 PM

0 Miembros y 1 Visitante están viendo este tema.

Lekim

Hola

¿Hay alguna clase o función en Net para crear tablas Html?. Mi idea es crear una tabla HTML a partir de datos de un datagridview o ListView.

Lo que yo he hecho por ahora es algo como lo siguiente:

Código (vbnet) [Seleccionar]
   
       Dim builder As New System.Text.StringBuilder
       With builder
           .AppendLine("<table border=""1"" style=""border-collapse: collapse;"">")
           .AppendLine("<caption>Leyenda</caption>")
           .AppendLine("<tbody>")
           .AppendLine("<tr>")
           .AppendLine(String.Format("<td>{0}</td>", "Celda1"))
           .AppendLine(String.Format("<td>{0}</td>", "Celda2"))
           .AppendLine("</tr>")
           .AppendLine("<tr>")
           .AppendLine(String.Format("<td>{0}</td>", "Celda3"))
           .AppendLine(String.Format("<td>{0}</td>", "Celda4"))
           .AppendLine("</tr>")
           .AppendLine("</tbody>")
           .AppendLine("</table>")
       End With



Pero es muy tedioso




He encontrado algo que puede ser lo que busco.

HtmlTable Class

del system.web.dll


Código (vbnet) [Seleccionar]
Imports System.Web.UI.HtmlControls

Public Class Form1

   Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

       Dim i As Integer
       Dim j As Integer
        Dim Table1 As HtmlTable
       Dim row As HtmlTableRow
       Dim cell As HtmlTableCell

      '//...
   End Sub
End Class

Eleкtro

#1
¿Para convertir una colección genérica a tabla html?, no, y desconozco el motivo, quizás pueda ser para evitar implementar funcionalidades basadas en asunciones de objetos representables en texto, pero esta ausencia de funcionalidad en la librería de clases de .NetFx nos presenta lugar a que existan cientos de soluciones home-made (que ya podrías haber buscado...) que hacen esas asunciones y puedes encontrar en Google, como por ejemplo esta:




Para crear una tabla html, desde Cero, si, puedes hacerlo.

En ASP.Net se puede utilizar el control Htmltable para crear y renderizar una tabla Html estática:


En WinForms puedes aprovechar ese control para poder crear una tabla Html en tiempo de ejecución, de forma guiada, mediante tipos/classes que representan la tabla, las filas y sus celdas.

Te muestro un ejemplo (en el enlace de arriba tienes otro ejemplo, basado en ASP.Net):

Código (vbnet) [Seleccionar]
Dim html As String

Using t As New HtmlTable,
    tr As New HtmlTableRow,
    td As New HtmlTableCell,
    sw As New StringWriter

   With t
       .BgColor = ColorTranslator.ToHtml(Color.Black)
       .Border = 2
       .BorderColor = ColorTranslator.ToHtml(Color.Gold)
       .Height = "300px"
       .Width = "200px"
   End With

   With td
       .BgColor = ColorTranslator.ToHtml(Color.DarkGray)
       .BorderColor = ColorTranslator.ToHtml(Color.LightGray)
       .Height = "10px"
       .InnerText = "Hello World!"
   End With

   tr.Cells.Add(td)
   t.Rows.Add(tr)

   t.RenderControl(New HtmlTextWriter(sw))
   html = sw.ToString()

   Console.WriteLine(html)

End Using


Resultado de ejecución:
Código (vbnet) [Seleccionar]
<table bgcolor="Black" border="2" bordercolor="Gold" height="300px" width="200px">
<tr>
<td bgcolor="DarkGray" bordercolor="LightGrey" height="10px">Hello World!</td>
</tr>
</table>


Sabiendo esto, puedes crear un método de uso genérico o extensión de método, solo tienes que iterar los elementos de "X" colección para ir construyendo la tabla html de forma automatizada, aunque en realidad también puedes hacer lo mismo que acabo de mencionar pero construyendo el string por completo con la class StringBuilder (como en la url de StackOverflow), cosa que yo no recomiendo, pues a la larga es mucho más rentable o beneficioso y llevadero el utilizar tipos que representan lo que quieres llevar a cabo (HtmlTable, HtmlTableRow, etc), aunque pueda resultarte igual de tedioso o no.

Saludos








Lekim

Gracias Elektro  ;-)

Ahora mismo estaba buscando ejemplos en g'u'gle. Me has ahorrado el trabajo, o gran parte.  


s2s




(Aunque aquí podríamos tener el problema que ya comentamos... con system.web.dll)