2009-06-19 5 views
9

DataTable을 문자열로 변환하는 가장 빠른 방법은 무엇입니까 (HTML 형식)?ASP.NET : DataTable을 문자열 (HTML)로 렌더링하는 가장 짧은 방법은 무엇입니까?

프로그래밍 방식으로 UI 컨트롤에 바인딩하고 ASP.NET 페이지에 렌더링하는 것은 허용되지 않습니다. ASP.NET 페이지 수명주기에 의존 할 수 없습니다.

이 목적은 중요하지 않지만 호기심을 충족시키기위한 것입니다. 이것은 많은 DataTable 처리를 수행하는 알고리즘에서 로깅/디버깅/덤프를위한 것입니다.

감사합니다.

답변

16

당신은 ASP.net을 사용할 수있는 등의 GridView, 데이터 그리드로 제어하고 그들이 StringWriter를을 사용하여 StringBuilder로 렌더링 지적,이를 위해 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 Writer를 만들고, 컨트롤을 설정하거나 데이터 바인딩 한 다음 HTML Writer를 사용하여 render 메서드를 호출합니다.

그러면 문자열을 출력기에서 가져올 수 있습니다.

편집 : 처음에는 질문을 잘못 읽고 데이터 격자를 렌더링하고 싶다고 생각했습니다.

데이터 테이블을 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

이 응용 프로그램을 통해이 기능을 사용합니다. 쉽게 당신이 필요한 경우 조작 - 이것은 단지 기록의 목적을위한 경우 그것은 XML로 로그 아웃 더 이해가되지 않을 수도 있습니다,

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 개 이상의 레코드에 대해서도 이와 동일한 접근 방식을 사용했습니다. –

2

매우 간단합니다. WriteXml 메서드를 호출하면됩니다.

관련 문제