2009-06-19 15 views
9

Cách ngắn nhất để chuyển đổi một DataTable thành một chuỗi (được định dạng bằng HTML) là gì?ASP.NET: Cách ngắn nhất để kết xuất DataTable thành chuỗi (HTML)?

Lập trình ràng buộc với điều khiển giao diện người dùng và hiển thị trang ASP.NET không được chấp nhận. Không thể phụ thuộc vào vòng đời trang ASP.NET.

Mục đích của việc này không quan trọng, nhưng để thỏa mãn sự tò mò: Điều này dành cho mục đích ghi nhật ký/gỡ lỗi/kết xuất trong các thuật toán làm rất nhiều việc xử lý DataTable.

Cảm ơn!

Trả lời

16

Bạn có thể sử dụng ASP.net điều khiển như GridView, DataGrid và chỉ cho họ làm vào StringBuilder sử dụng StringWriter, Không cần phải sử dụng trang ASP.net cho điều này, đây là một ví dụ đơn giản trong điều khiển

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

Tạo điều khiển, tạo một Trình soạn HTML, đặt bất kỳ cài đặt nào hoặc dữ liệu điều khiển, sau đó gọi phương thức hiển thị, sử dụng Trình ghi HTML.

Sau đó, bạn có thể lấy chuỗi ra khỏi người viết.

Chỉnh sửa: Ban đầu tôi đã đọc sai câu hỏi và nghĩ rằng bạn muốn hiển thị dữ liệu.

Có thể dễ dàng kết xuất dữ liệu có thể định hình được với XML của nó.

bạn đã yêu cầu HTML.

đây là mã ứng dụng bảng điều khiển sẽ hiển thị dữ liệu có thể định vị bằng cách sử dụng điều khiển dữ liệu.

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

Tôi sử dụng chức năng này thông qua ứng dụng của mình. Nó khá đơn giản

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

Tôi đã sử dụng cách tiếp cận tương tự này ngay cả đối với các bảng lớn hơn 10.000 bản ghi hợp lý. –

2

Nếu đây là chỉ dành riêng cho mục đích khai thác gỗ, có thể nó không có ý nghĩa hơn để đăng nhập chúng ra như XML - dễ dàng hơn để thao tác nếu bạn cần. Bạn chỉ cần gọi phương thức WriteXml.

Các vấn đề liên quan