2009-06-19 17 views
9

DataTableを文字列(HTML形式)に変換する最短の方法は何ですか?ASP.NET:DataTableを文字列(HTML)にレンダリングする最短方法ですか?

プログラムでUIコントロールにバインドし、ASP.NETページにレンダリングすることはできません。 ASP.NETページライフサイクルに依存できません。

この目的は重要ではありませんが、好奇心を満たす必要があります。これは、多くのDataTable処理を行うアルゴリズムでのログ/デバッグ/ダンプ目的です。

ありがとうございます!

答えて

16

あなたはASP.netを使用することができますが、このようなGridViewの、DataGridのように制御し、それらがに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 Writerを作成し、コントロールを設定またはデータバインドしてから、HTML Writerを使用してrenderメソッドを呼び出します。

これで、ライターから文字列を取り出すことができます。

編集:私は最初、質問を誤読し、あなたがデータグリッドをレンダリングしたいと思った。

DatatableをXMLに簡単にレンダリングすることができます。

HTMLをリクエストしました。

ここには、データグリッドコントロールを使用してデータテーブルをレンダリングするコンソールアプリケーションコードがあります。

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メソッドを呼び出すだけです。

関連する問題