2009-06-19 14 views
9

Qual è il modo più breve per convertire un DataTable in una stringa (formattato in HTML)?ASP.NET: il modo più semplice per rendere DataTable a una stringa (HTML)?

Collegamento a livello di programmazione a un controllo dell'interfaccia utente e rendering in una pagina ASP.NET non è accettabile. Non può dipendere dal ciclo di vita della pagina ASP.NET.

Lo scopo di questo non dovrebbe essere importante, ma per soddisfare la curiosità: questo è per gli scopi di logging/debugging/dump in algoritmi che eseguono un sacco di elaborazione DataTable.

Grazie!

risposta

16

È possibile utilizzare l'ASP.net controlli come GridView, DataGrid e puntare li rendono in StringBuilder utilizzando StringWriter, Non c'è bisogno di utilizzare la pagina ASP.net per questo, questo è un semplice esempio nella console

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

Creare il controllo, creare un writer HTML, impostare qualsiasi impostazione o il controllo del database, quindi chiamare il metodo di rendering, utilizzando il writer HTML.

È quindi possibile estrarre la stringa dallo scrittore.

Modifica: Inizialmente ho letto erroneamente la domanda e pensavo volessi rendere un datagrid.

Un Datatable può essere reso facilmente al relativo XML.

hai chiesto HTML.

qui è un codice app di console che renderizza un datatable utilizzando un controllo datagrid.

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 questa funzione tramite la mia applicazione. E 'piuttosto semplice

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

Ho utilizzato questo stesso approccio anche per tabelle ragionevolmente grandi oltre 10.000 record. –

2

Se questo è solo per scopi di registrazione, potrebbe non avere più senso per loro uscire in formato XML - più facile da manipolare se è necessario. Hai solo bisogno di chiamare il metodo WriteXml.

Problemi correlati