【问题标题】:Getting the InnerHtml of an HTMLTable C#获取 HTMLTable C# 的 InnerHtml
【发布时间】:2012-04-05 07:05:24
【问题描述】:

这个函数返回一个 HTML 表格:

private HtmlTable ConvertToHtml(DataTable dataTable)
        {
            var htmlTable = new HtmlTable();
            if (dataTable == null) return htmlTable; //null reference, empty table

            HtmlTableRow htmlRow = new HtmlTableRow();
            htmlTable.Rows.Add(htmlRow);

            foreach (DataColumn column in dataTable.Columns)
                htmlRow.Cells.Add(new HtmlTableCell() { InnerText = column.ColumnName });

            foreach (DataRow row in dataTable.Rows)
            {
                htmlRow = new HtmlTableRow();
                htmlTable.Rows.Add(htmlRow);

                foreach (DataColumn column in dataTable.Columns)
                    htmlRow.Cells.Add(new HtmlTableCell() { InnerText = row[column].ToString() });
            }

            return htmlTable;
        }

我想知道如何获得HtmlTableinnerHTML

目前,我正在这样做:

        var bodyhtml = ConvertToHtml(r.tblSalesVolume);
        MessageBox.Show(bodyhtml.InnerHtml);

但它说它没有这样的属性。

如何获取表格的 HTML 代码?

【问题讨论】:

标签: c# html .net winforms html-table


【解决方案1】:

你已经写了InnerText作为属性,你应该写InnerHtml。并且不需要ToString(),因为HtmlTable.InnerHtml 是一个字符串。

HtmlTable.InnerHtml


为什么不直接创建 html 而不是使用 HtmlTable?而不是 TableRow 您只是在“单元格”循环之前和“单元格”循环之后使用。当你写一个单元格时,你只写'value'。'真的没有任何理由使用 HtmlTable 来创建表格 html 字符串。


private string ConvertToHtml(DataTable dataTable)
{
    StringBuilder sb = new StringBuilder();

    sb.Append("<table>");

    if (dataTable != null)
    {
        sb.Append("<tr>");

        foreach (DataColumn column in dataTable.Columns)
            sb.AppendFormat("<td>{0}</td>", HttpUtility.HtmlEncode(column.ColumnName));
        sb.Append("</tr>");

        foreach (DataRow row in dataTable.Rows)
        {
            sb.Append("<tr>");

            foreach (DataColumn column in dataTable.Columns)
                sb.AppendFormat("<td>{0}</td>", HttpUtility.HtmlEncode(row[column]));

            sb.Append("</tr>");
        }

    }

    sb.Append("</table>");
    return sb.ToString();
}

【讨论】:

  • System.NotSupportedException 未处理 Message="'HtmlTable' 不支持 InnerHtml 属性。"
  • 我不知道这是否相关,但我正在使用 winforms
  • @Simon:链接显示“此控件不支持此属性”。
  • @I__: 猜你是在你的 WinForms 项目中引用“System.Web.UI.HtmlControls:”。
  • @Simon: "不要读取或赋值给这个属性,否则会抛出System.NotSupportedException异常。这个属性继承自HtmlContainerControl类,不适用于HtmlTable类。”
【解决方案2】:

根据 Leon 的回答,使用 HtmlTable.RenderControl() 和 OP 的代码:

StringBuilder sb = new StringBuilder();
StringWriter tw = new StringWriter(sb);
HtmlTextWriter hw = new HtmlTextWriter(tw);

var bodyhtml = ConvertToHtml(r.tblSalesVolume);

bodyhtml.RenderControl(hw);
MessageBox.Show(sb.ToString());

【讨论】:

    【解决方案3】:

    您可以使用 HtmlTable.RenderControl() 方法。

    例子:

    StringBuilder sb = new StringBuilder();
    StringWriter tw = new StringWriter(sb);
    HtmlTextWriter hw = new HtmlTextWriter(tw);
    
    HtmlTable.RenderControl(hw);
    String HTMLContent = sb.ToString();
    

    【讨论】:

    • 错误1 非静态字段、方法或属性需要对象引用
    • @I__:你必须写bodyHtml.RenderControl(hw);。 Bcos 是您正在使用的对象。
    猜你喜欢
    • 2014-11-19
    • 2011-10-11
    • 2011-10-20
    • 2018-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-21
    • 1970-01-01
    相关资源
    最近更新 更多