2009-06-19 9 views
9

Jaki jest najkrótszy sposób przekształcenia DataTable w ciąg znaków (sformatowany w HTML)?ASP.NET: Najkrótszy sposób renderowania DataTable do łańcucha znaków (HTML)?

Programowe powiązanie z formantem interfejsu użytkownika i renderowanie do strony ASP.NET jest niedopuszczalne. Nie można polegać na cyklu życia strony ASP.NET.

Celem tego nie powinno mieć znaczenia, ale zaspokojenie ciekawości: Jest to możliwe w celu rejestrowania/debugowania/zrzutu w algorytmach, które wykonują wiele operacji DataTable.

Dzięki!

Odpowiedz

16

Można użyć ASP.net kontroluje takie jak GridView, DataGrid i skierować je do renderowania za pomocą StringBuilder StringWriter, nie trzeba używać strony ASP.NET za to, że jest to prosty przykład w konsoli

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

Utwórz kontrolkę, utwórz program piszący HTML, ustaw dowolne ustawienia lub zmień kontrolę bazy danych, a następnie wywołaj metodę renderowania za pomocą kreatora HTML.

Następnie można wyciągnąć napis z pisarza.

Edytuj: Początkowo błędnie przeczytałem pytanie i pomyślałem, że chcesz renderować datagrid.

Dane można z łatwością renderować do pliku XML.

poprosiłeś o HTML.

tutaj jest kod aplikacji konsoli, który wyrenderuje datatable za pomocą formantu 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

Używam tej funkcji w mojej aplikacji. Jest to dość proste

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

Użyłem tego samego podejścia nawet dla rozsądnie dużych tabel 10.000 rekordów. –

2

Jeśli jest to tylko dla celów rejestrowania, nie może to więcej sensu ich zalogować się jako XML - łatwiej manipulować, jeśli trzeba. Musisz tylko wywołać metodę WriteXml.

Powiązane problemy