HTML generiert Zeilenspanne in der HTML-Tabellenzeichenfolge

c# html html-agility-pack html-table

Frage

Ich habe den folgenden Code, der rowspan zu einer Datentabelle in einer HTML-Zeichenfolge hinzufügt, aber ich möchte, dass er als Datatable nicht als Parameter erhält, sondern als Parameter eine HTML-Zeichenfolge in C # erhält.

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

Das ist das Ergebnis, das hoffe ich

erwartetes Ergebnis

Beliebte Antwort

Es gibt ein paar Dinge, die mit dem Code nicht stimmen, und einige Möglichkeiten, wie Sie Ihren Code verbessern können:

  1. <table border=1> fehlen die Anführungszeichen um die 1 . Es sollte <table border='1'> .
  2. Ihnen fehlen die Tags <thead> und <tbody> um die Zeilen-Tags herum.
  3. Verwenden Sie statt ständig += einen StringBuilder .
  4. Um Ihren Code sauberer zu gestalten, können Sie einige Ihrer for Schleifen in foreach Schleifen ändern.

Ihr Code sollte in etwa so geändert werden:

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

(Wenden Sie die gleichen Konzepte auf den mittleren Code an, den ich entfernt habe.)



Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum