2009-06-19 77 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方法。

相关问题