ASP.NET: самый короткий способ визуализации DataTable в строку (HTML)? - PullRequest
9 голосов
/ 19 июня 2009

Какой самый короткий способ преобразовать DataTable в строку (отформатированную в HTML)?

Программная привязка к элементу управления пользовательского интерфейса и отображение на странице ASP.NET недопустимы. Не может зависеть от жизненного цикла страницы ASP.NET.

Цель этого не должна иметь значения, но удовлетворить любопытство: это для целей ведения журнала / отладки / дампа в алгоритмах, которые выполняют большую часть обработки DataTable.

Спасибо!

Ответы [ 4 ]

16 голосов
/ 19 июня 2009

Вы можете использовать элементы управления 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; }
}
8 голосов
/ 19 июня 2009

Я использую эту функцию через свое приложение. Это довольно просто

  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 голосов
/ 19 июня 2009

Если это только для целей ведения журнала, возможно, не имеет смысла выходить из них как XML - проще манипулировать, если вам нужно. Вам просто нужно вызвать метод WriteXml.

2 голосов
/ 19 июня 2009

Создайте элемент управления, создайте средство записи HTML, задайте любые параметры или привязайте данные к элементу управления, затем вызовите метод рендеринга с помощью средства записи HTML.

Затем вы можете получить строку из писателя.

Редактировать: я изначально неправильно понял вопрос и подумал, что вы хотите отобразить сетку данных.

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();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...