【问题标题】:ASP.NET: Shortest way to render DataTable to a string (HTML)?ASP.NET:将 DataTable 呈现为字符串 (HTML) 的最短方法?
【发布时间】:2010-11-04 08:43:31
【问题描述】:

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

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

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

谢谢!

【问题讨论】:

    标签: asp.net string datatable


    【解决方案1】:

    您可以使用 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】:

      我通过我的应用程序使用此功能。这很简单

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

      【讨论】:

      • 即使对于包含 10,000 多条记录的相当大的表,我也使用了相同的方法。
      【解决方案3】:

      如果这只是为了记录,那么将它们作为 XML 记录可能会更有意义 - 如果需要,更容易操作。您只需要调用 WriteXml 方法即可。

      【讨论】:

        【解决方案4】:

        创建控件,创建 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();
            }
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-06-07
          • 2011-05-08
          • 2014-06-02
          • 1970-01-01
          • 2018-08-30
          相关资源
          最近更新 更多