获取 HTMLTable C# 的 InnerHtml
Posted
技术标签:
【中文标题】获取 HTMLTable C# 的 InnerHtml【英文标题】:Getting the InnerHtml of an HTMLTable C# 【发布时间】: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;
我想知道如何获得HtmlTable
的innerHTML
。
目前,我正在这样做:
var bodyhtml = ConvertToHtml(r.tblSalesVolume);
MessageBox.Show(bodyhtml.InnerHtml);
但它说它没有这样的属性。
如何获取表格的 HTML 代码?
【问题讨论】:
复制 (***.com/questions/6789639/…) 【参考方案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();
【讨论】:
复制 (***.com/questions/6789639/…) 错误1 非静态字段、方法或属性需要对象引用 @I__:你必须写bodyHtml.RenderControl(hw);
。 Bcos 是您正在使用的对象。以上是关于获取 HTMLTable C# 的 InnerHtml的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Apache Mod_autoindex 使用 NameWidth 和 HTMLTable 设置目录列表的样式?