Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: Lekim en 7 Abril 2016, 14:38 pm



Título: Tabla html con net
Publicado por: Lekim en 7 Abril 2016, 14:38 pm
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
  1.  
  2.        Dim builder As New System.Text.StringBuilder
  3.        With builder
  4.            .AppendLine("<table border=""1"" style=""border-collapse: collapse;"">")
  5.            .AppendLine("<caption>Leyenda</caption>")
  6.            .AppendLine("<tbody>")
  7.            .AppendLine("<tr>")
  8.            .AppendLine(String.Format("<td>{0}</td>", "Celda1"))
  9.            .AppendLine(String.Format("<td>{0}</td>", "Celda2"))
  10.            .AppendLine("</tr>")
  11.            .AppendLine("<tr>")
  12.            .AppendLine(String.Format("<td>{0}</td>", "Celda3"))
  13.            .AppendLine(String.Format("<td>{0}</td>", "Celda4"))
  14.            .AppendLine("</tr>")
  15.            .AppendLine("</tbody>")
  16.            .AppendLine("</table>")
  17.        End With
  18.  


Pero es muy tedioso



He encontrado algo que puede ser lo que busco.

HtmlTable Class (https://msdn.microsoft.com/en-us/library/system.web.ui.htmlcontrols.htmltable(v=vs.110).aspx)

del system.web.dll


Código
  1. Imports System.Web.UI.HtmlControls
  2.  
  3. Public Class Form1
  4.  
  5.    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  6.  
  7.        Dim i As Integer
  8.        Dim j As Integer
  9.        Dim Table1 As HtmlTable
  10.        Dim row As HtmlTableRow
  11.        Dim cell As HtmlTableCell
  12.  
  13.       '//...
  14.    End Sub
  15. End Class


Título: Re: Tabla html con net
Publicado por: Eleкtro en 7 Abril 2016, 16:14 pm
¿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:
  • Export DataGridView to HTML Page | StackOverflow (http://stackoverflow.com/questions/16008477/export-datagridview-to-html-page)



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:

  • How to: Create and Edit HTML Tables in Design View | MSDN (https://msdn.microsoft.com/en-us/library/0fz1zbtd%28v=vs.100%29.aspx)
  • Table, TableRow, and TableCell Web Server Control Overview | MSDN (https://msdn.microsoft.com/en-us/library/ty0ce8sc%28v=vs.100%29.aspx)

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
  1. Dim html As String
  2.  
  3. Using t As New HtmlTable,
  4.     tr As New HtmlTableRow,
  5.     td As New HtmlTableCell,
  6.     sw As New StringWriter
  7.  
  8.    With t
  9.        .BgColor = ColorTranslator.ToHtml(Color.Black)
  10.        .Border = 2
  11.        .BorderColor = ColorTranslator.ToHtml(Color.Gold)
  12.        .Height = "300px"
  13.        .Width = "200px"
  14.    End With
  15.  
  16.    With td
  17.        .BgColor = ColorTranslator.ToHtml(Color.DarkGray)
  18.        .BorderColor = ColorTranslator.ToHtml(Color.LightGray)
  19.        .Height = "10px"
  20.        .InnerText = "Hello World!"
  21.    End With
  22.  
  23.    tr.Cells.Add(td)
  24.    t.Rows.Add(tr)
  25.  
  26.    t.RenderControl(New HtmlTextWriter(sw))
  27.    html = sw.ToString()
  28.  
  29.    Console.WriteLine(html)
  30.  
  31. End Using

Resultado de ejecución:
Código
  1. <table bgcolor="Black" border="2" bordercolor="Gold" height="300px" width="200px">
  2. <tr>
  3. <td bgcolor="DarkGray" bordercolor="LightGrey" height="10px">Hello World!</td>
  4. </tr>
  5. </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


Título: Re: Tabla html con net
Publicado por: Lekim en 7 Abril 2016, 16:29 pm
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)