C#代码后置中实现HTML表格空单元格rowspan跨行合并的方法
实现逻辑
要实现第二列空单元格与上一行合并,核心逻辑是由上方非空的第二列单元格承担跨行属性,空值对应的行直接省略第二列单元格,同时累计跨行计数,可兼容连续多行空值的场景。
修改后代码
HtmlTable table_checklist = ((HtmlTable)tbl_checklist); // 记录上一个非空的第二列单元格,以及累计跨行数 HtmlTableCell lastSubjectCell = null; int rowSpanCount = 1; if (dr2.HasRows) { while (dr2.Read()) { HtmlTableRow row = new HtmlTableRow(); HtmlTableCell cell1 = new HtmlTableCell(); HtmlTableCell cell2 = new HtmlTableCell(); HtmlTableCell cell3 = new HtmlTableCell(); cell1.InnerText = dr2["role_id"].ToString(); row.Cells.Add(cell1); string currentSubject = dr2["subject"].ToString(); cell2.InnerText = currentSubject; if (string.IsNullOrEmpty(currentSubject)) { // 当前第二列为空,累计跨行数,当前行不添加第二列单元格 rowSpanCount++; } else { // 给上一个非空单元格设置累计的跨行值 if (lastSubjectCell != null) { lastSubjectCell.RowSpan = rowSpanCount; } // 重置计数,更新上一个非空单元格引用 rowSpanCount = 1; lastSubjectCell = cell2; row.Cells.Add(cell2); } cell3.InnerText = dr2["student"].ToString(); row.Cells.Add(cell3); table_checklist.Rows.Add(row); } // 处理最后一组连续跨行场景 if (lastSubjectCell != null) { lastSubjectCell.RowSpan = rowSpanCount; } }
注意事项
- 如果表格存在表头行,计数逻辑从第一行数据行开始即可,不要将表头计入跨行统计。
- 代码可自动兼容连续多行第二列为空的场景,不需要手动固定跨行数值为2。
内容的提问来源于stack exchange,提问作者user2431727
相关产品推荐
相关产品推荐

