2009-06-19 78 views
9

將DataTable轉換爲字符串(HTML格式)的最簡單方法是什麼?ASP.NET:將DataTable呈現爲字符串(HTML)的最短途徑?

編程綁定到UI控件並呈現到ASP.NET頁面是不可接受的。不能依賴於ASP.NET頁面生命週期。

這樣做的目的應該沒有關係,但要滿足好奇心:這是用於執行大量DataTable處理的算法中的日誌/調試/轉儲目的。

謝謝!

回答

16

您可以使用ASP.net如GridView控件,DataGrid的控制,並引導他們呈現到StringBuilder的使用StringWriter的,沒必要用ASP.net頁面對於這一點,這是在控制檯

一個簡單的例子
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

創建控件,創建HTML編寫器,設置控件的任何設置或數據綁定,然後使用HTML編寫器調用渲染方法。

然後,您可以從編寫器中獲取字符串。

編輯:我最初誤讀了這個問題,並認爲你想渲染一個數據網格。

Datatable可以很容易地呈現給它的XML。

你問過HTML。

這是一個控制檯應用程序代碼,它將使用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

我通過我的應用程序使用這個函數。這是非常簡單的

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

即使是合理大型的表格10,000+條記錄,我也使用了相同的方法。 – 2009-09-16 17:56:43

2

如果這只是爲了記錄的目的,會不會反而更有意義登錄出來作爲XML - 更容易操縱,如果你需要。你只需要調用WriteXml方法。

相關問題