You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何遍历动态生成的HTML表格并根据单元格文本修改背景色?

如何遍历动态生成的HTML表格并根据单元格文本修改背景色?

我明白你现在遇到的问题了——你用字符串拼接生成了HTML表格,然后想在后台通过服务器控件的方式去遍历修改单元格样式,但发现根本找不到这个表格的引用对吧?这是因为你生成的是纯HTML字符串,哪怕加了runat="server",ASP.NET也不会把它解析成服务器端的Table控件实例,所以FindControl自然拿不到对象。

下面给你两种可行的解决方案,你可以根据自己的需求选择:

方案一:生成HTML时直接添加样式(推荐)

最简单直接的方式就是在生成表格HTML字符串的阶段,就根据单元格文本判断并添加背景色样式,这样不需要后续再去查找控件。只需要修改你的ConvertDataTableToHTML方法即可:

public static string ConvertDataTableToHTML(DataTable dt) {
    string html = "<table id=\"tbl_1\" class=\"table table-hover table-condensed\">";
    // 添加表头行
    html += "<thead><tr>";
    for (int i = 0; i < dt.Columns.Count; i++)
        html += "<th style=\"background-color: #800000; color: #FFFFFF; font-weight: bold\">" + dt.Columns[i].ColumnName + "</th>";
    html += "</tr></thead>"; // 修正了原代码中标签顺序的小问题
    // 添加数据行
    for (int i = 0; i < dt.Rows.Count; i++) {
        html += "<tr>";
        for (int j = 0; j < dt.Columns.Count; j++) {
            string cellText = dt.Rows[i][j].ToString().ToLower();
            // 根据文本判断是否添加背景色样式
            string cellStyle = cellText != "not run" ? " style=\"background-color: red\"" : "";
            html += $"<td{cellStyle}>{dt.Rows[i][j].ToString()}</td>";
        }
        html += "</tr>";
    }
    html += "</table>";
    return html;
}

这样修改后,生成的HTML会直接带有符合条件的背景色样式,你只需要像之前一样把结果赋值给myTBL_1.InnerHtml即可,不需要后续的遍历代码。这种方式逻辑清晰,性能也更好,因为少了一次控件查找和遍历的过程。

方案二:创建服务器端Table控件(适合需要后续操作控件的场景)

如果你确实需要在后台把表格作为服务器控件来管理(比如后续还要动态修改内容),那就要放弃字符串拼接的方式,直接创建System.Web.UI.WebControls.Table控件,然后添加到页面的容器中:

OracleDataReader dtReader;
objCmd = new OracleCommand(varname1, objConn);
dtReader = objCmd.ExecuteReader();
if (dtReader.HasRows == true) {
    DataTable dt1 = new DataTable();
    dt1.Load(dtReader);
    // 设置DataTable属性的代码不变
    dt1.Columns[2].ReadOnly = false;
    dt1.Columns[2].MaxLength = 200;
    dt1.Columns[3].ReadOnly = false;
    dt1.Columns[3].MaxLength = 200;
    dt1.Columns[4].ReadOnly = false;
    dt1.Columns[4].MaxLength = 200;
    dt1.Columns[5].ReadOnly = false;
    dt1.Columns[5].MaxLength = 200;
    SG_COUNT_STATUS4(dt1);

    // 创建服务器端Table控件
    System.Web.UI.WebControls.Table dynamicTable = new System.Web.UI.WebControls.Table();
    dynamicTable.ID = "tbl_1";
    dynamicTable.CssClass = "table table-hover table-condensed";

    // 添加表头
    TableRow headerRow = new TableRow();
    foreach (DataColumn col in dt1.Columns) {
        TableHeaderCell headerCell = new TableHeaderCell();
        headerCell.Text = col.ColumnName;
        headerCell.Style.Add("background-color", "#800000");
        headerCell.Style.Add("color", "#FFFFFF");
        headerCell.Font.Bold = true;
        headerRow.Cells.Add(headerCell);
    }
    dynamicTable.Rows.Add(headerRow);

    // 添加数据行并设置样式
    foreach (DataRow row in dt1.Rows) {
        TableRow dataRow = new TableRow();
        foreach (var item in row.ItemArray) {
            TableCell cell = new TableCell();
            cell.Text = item.ToString();
            string cellText = cell.Text.ToLower();
            if (cellText != "not run") {
                cell.BackColor = System.Drawing.Color.Red;
            }
            dataRow.Cells.Add(cell);
        }
        dynamicTable.Rows.Add(dataRow);
    }

    // 将Table控件添加到页面容器(比如你的myTBL_1是Panel控件)
    myTBL_1.Controls.Add(dynamicTable);
}

这种方式创建的是真正的服务器端控件,ASP.NET会管理它的生命周期,之后你也可以通过FindControl("tbl_1")找到它(注意要在合适的页面生命周期阶段创建,比如Page_Init或Page_Load,否则回发后可能找不到)。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.07 13:39:35