2009-06-19 10 views
9

¿Cuál es la forma más corta de convertir una DataTable en una cadena (formateada en HTML)?ASP.NET: ¿La forma más corta de convertir DataTable en una cadena (HTML)?

No es aceptable vincular mediante programación a un control de interfaz de usuario y una representación en una página ASP.NET. No puede depender del ciclo de vida de la página ASP.NET.

El propósito de esto no debería importar, pero para satisfacer la curiosidad: Esto es para fines de registro/depuración/volcado en algoritmos que hacen un montón de procesamiento de DataTable.

Gracias!

Respuesta

16

Puede utilizar el ASP.net controles tales como GridView, DataGrid y el punto hacen en StringBuilder usando StringWriter, No hay necesidad de utilizar la página ASP.net para esto, este es un ejemplo simple en la consola de

class Program 
{ 
    static void Main(string[] args) 
    { 
     IList<Person> persons = new List<Person>() 
      { 
       new Person{Id = 1, Name="Test Name 1"}, 
       new Person{Id = 2, Name="Test Name 2"} 
      }; 

     GridView gridView = new GridView(); 
     StringBuilder result = new StringBuilder(); 
     StringWriter writer = new StringWriter(result); 
     HtmlTextWriter htmlWriter = new HtmlTextWriter(writer); 
     gridView.DataSource = persons; 
     gridView.DataBind(); 

     gridView.RenderControl(htmlWriter); 

     Console.WriteLine(result); 
    } 


} 


class Person 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
} 
2

Cree el control, cree un Escritor de HTML, configure cualquier configuración o enlace de datos, luego llame al método de representación, utilizando el Escritor de HTML.

Puede sacar la cadena del escritor.

Editar: Inicialmente leí mal la pregunta y pensé que quería representar una cuadrícula de datos.

Una tabla de datos se puede representar fácilmente en su XML.

preguntaste por HTML.

aquí hay un código de aplicación de consola que representará una tabla de datos utilizando un control de cuadrícula de datos.

class Program 
{ 
    static void Main(string[] args) 
    { 
     DataTable dt = new DataTable(); 
     dt.Columns.Add("Column1"); 
     dt.Columns.Add("Column2"); 
     dt.Rows.Add("RowValue1", "Field2RowValue1"); 
     dt.Rows.Add("RowValue2", "Field2RowValue2"); 

     DataGrid dg = new DataGrid(); 
     dg.DataSource = dt; 
     dg.DataBind(); 

     StringWriter sw = new StringWriter(); 
     HtmlTextWriter w = new HtmlTextWriter(sw); 

     dg.RenderControl(w); 

     Console.Write(sw.ToString()); 
     Console.ReadLine(); 
    } 
} 
8

Uso esta función a través de mi aplicación. Es bastante sencillo

static public string ConvertDataTableToHTMLString(System.Data.DataTable dt, string filter, string sort, string fontsize, string border, bool headers, bool useCaptionForHeaders) 
     { 

      StringBuilder sb = new StringBuilder(); 
      sb.Append("<table border='" + border + "'b>"); 
      if (headers) 
      { 
       //write column headings 
       sb.Append("<tr>"); 
       foreach (System.Data.DataColumn dc in dt.Columns) 
       { 
        if (useCaptionForHeaders) 
         sb.Append("<td><b><font face=Arial size=2>" + dc.Caption + "</font></b></td>"); 
        else 
         sb.Append("<td><b><font face=Arial size=2>" + dc.ColumnName + "</font></b></td>"); 
       } 
       sb.Append("</tr>"); 
      } 

      //write table data 
      foreach (System.Data.DataRow dr in dt.Select(filter,sort)) 
      { 
       sb.Append("<tr>"); 
       foreach (System.Data.DataColumn dc in dt.Columns) 
       { 
        sb.Append("<td><font face=Arial size=" + fontsize + ">" + dr[dc].ToString() + "</font></td>"); 
       } 
       sb.Append("</tr>"); 
      } 
      sb.Append("</table>"); 

      return sb.ToString(); 
     } 
+0

Utilicé este mismo enfoque incluso para tablas razonablemente grandes de más de 10.000 registros. –

2

Si esto es sólo para fines de registro, ¿no podría tener más sentido para conectarse a cabo como XML - más fácil de manipular si es necesario. Solo necesita llamar al método WriteXml.

Cuestiones relacionadas