【问题标题】:HTML generate rowspan in html table stringHTML在html表格字符串中生成rowspan
【发布时间】:2018-02-06 00:04:06
【问题描述】:

我有以下代码,它将行跨度添加到 html 字符串中的数据表中,但我希望它不要将数据表作为参数接收,而是将 C# 中的 html 字符串作为参数接收。

protected void Page_Load(object sender, EventArgs e)
{
    DataTable dt = new DataTable();
    dt.Columns.Add("Subject");
    dt.Columns.Add("Code");
    dt.Columns.Add("Test");
    dt.Columns.Add("Class");
    dt.Rows.Add("Math", "9", "ABC", "D1");
    dt.Rows.Add("Math", "9", "ABD", "D2");
    dt.Rows.Add("Math", "9", "ABE", "D3");
    dt.Rows.Add("Math", "9", "ABF", "D4");
    dt.Rows.Add("Science", "91", "ABG", "D1");
    dt.Rows.Add("Science", "91", "ABH", "D2");
    dt.Rows.Add("Science", "91", "ABI", "D3");
    dt.Rows.Add("English", "191", "ABJ", "D1");
    Label1.Text = ConvertDataTableToHTML(dt);

}
public static string ConvertDataTableToHTML(DataTable dt)
{
    string html = "<table border=1>";
    //add header row
    html += "<tr>";
    for (int i = 0; i < dt.Columns.Count; i++)
    {
        html += "<td>" + dt.Columns[i].ColumnName + "</td>";
    }
    html += "</tr>";
    //add rows
    string sub = "";
    for (int i = 0; i < dt.Rows.Count; i++)
    {
        html += "<tr>";
        int count = dt.Select("Subject ='" + dt.Rows[i][0].ToString() + "'").Count();
        for (int j = 0; j < dt.Columns.Count; j++)
        {
            if (j < 2)
            {
                if (sub != dt.Rows[i][0].ToString())
                {
                    html += "<td rowspan='" + count + "'>" + dt.Rows[i][j].ToString() + "</td>";
                }
                continue;
            }
            html += "<td>" + dt.Rows[i][j].ToString() + "</td>";
        }
        sub = dt.Rows[i][0].ToString();
        html += "</tr>";
    }
    html += "</table>";
    return html;
}

这是我希望的结果

【问题讨论】:

  • 您能否提供一个示例,您的代码实际产生了什么?
  • 什么不起作用?您是否收到错误消息?你得到什么输出,它如何与你想要的输出不匹配?请提供更多详细信息。由于您的问题目前是短语,因此很难说出问题所在。

标签: c# html html-table html-agility-pack


【解决方案1】:

代码有一些问题,您可以通过一些方法改进代码:

  1. &lt;table border=1&gt; 缺少 1 周围的引号。应该是&lt;table border='1'&gt;
  2. 行标签周围缺少&lt;thead&gt;&lt;tbody&gt; 标签。
  3. 不要经常使用+=,而是使用StringBuilder
  4. 为了使您的代码更简洁,您可以将一些 for 循环更改为 foreach 循环。

你的代码应该改成这样:

public static string ConvertDataTableToHTML(DataTable dt)
{
    StringBuilder builder = new StringBuilder();

    //add header row
    builder.Append("<table border='1'><thead><tr>");
    foreach (DataColumn col in dt.Columns)
    {
        builder.Append("<td>");
        builder.Append(col.ColumnName);
        builder.Append("</td>");
    }

    builder.Append("</tr></thead><tbody>");

    //add rows
    string sub = "";

    ...

    builder.Append("</tbody></table>");

    return builder.ToString();
}

(只需将相同的概念应用到我删除的中间代码即可。)

【讨论】:

    猜你喜欢
    • 2013-03-28
    • 2023-03-19
    • 2023-03-14
    • 1970-01-01
    • 2013-03-05
    • 1970-01-01
    • 1970-01-01
    • 2020-06-30
    • 1970-01-01
    相关资源
    最近更新 更多