ASP.NET:将DataTable呈现为字符串(HTML)的最短方式?

时间:2009-06-19 16:08:35

标签: asp.net string datatable

将DataTable转换为字符串(以HTML格式)的最短路径是什么?

不能接受以编程方式绑定到UI控件并呈现到ASP.NET页面。不能依赖于ASP.NET页面生命周期。

这个目的无关紧要,但要满足好奇心:这是为了进行大量DataTable处理的算法中的日志/调试/转储目的。

谢谢!

4 个答案:

答案 0 :(得分:16)

你可以使用Grid.net,DataGrid之类的ASP.net控件,并使用StringWriter将它们渲染到StringBuilder中,不需要使用ASP.net页面,这是Console中的一个简单示例

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; }
}

答案 1 :(得分: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();
        }

答案 2 :(得分:2)

创建控件,创建HTML Writer,设置任何设置或数据绑定控件,然后使用HTML Writer调用render方法。

然后你可以从作家那里获取字符串。

编辑:我最初误读了这个问题,并认为你想渲染一个数据网格。

可以轻松地将数据表呈现为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();
    }
}

答案 3 :(得分:2)

如果这仅仅是为了记录日志,将它们作为XML注销可能没有意义 - 如果需要,更容易操作。您只需要调用WriteXml方法。