如何在C#中生成包含两个DataTable的HTML表格用于邮件发送
实现支持双DataTable的HTML表格生成方法
思路
把原单表生成HTML的逻辑抽成私有辅助方法,新的双表方法通过调用该辅助方法分别处理两个DataTable,将各自生成的HTML内容拼接起来,同时保留原有的样式和空表提示逻辑。
修改后的完整代码
public static string HtmlTable(DataTable table, DataTable table2) { try { StringBuilder messageBody = new StringBuilder(); // 生成第一个表格的内容 messageBody.Append(GenerateSingleHtmlTable(table, "第一个表格数据")); // 添加换行分隔两个表格 messageBody.Append("<br><br>"); // 生成第二个表格的内容 messageBody.Append(GenerateSingleHtmlTable(table2, "第二个表格数据")); return messageBody.ToString(); } catch (Exception ex) { return $"生成HTML表格时出错: {ex.Message}"; } } // 私有辅助方法:生成单个DataTable的HTML表格 private static string GenerateSingleHtmlTable(DataTable table, string tableTitle) { string emptyMessage = $"<font>{tableTitle} 无数据</font>"; if (table == null || table.Rows.Count == 0) { return emptyMessage; } // 复用原有的样式定义 string htmlTableStart = "<table style=\"border-collapse:collapse; text-align:center;\" >"; string htmlTableEnd = "</table>"; string htmlHeaderRowStart = "<tr style =\"background-color:#6FA1D2; color:#ffffff;\">"; string htmlHeaderRowEnd = "</tr>"; string htmlTrStart = "<tr style =\"color:#555555;\">"; string htmlTrEnd = "</tr>"; string htmlTdStart = "<td style=\" border-color:#5c87b2; border-style:solid; border-width:thin; padding: 5px;\">"; string htmlTdEnd = "</td>"; StringBuilder tableHtml = new StringBuilder(); tableHtml.Append($"<font>{tableTitle}</font><br><br>"); tableHtml.Append(htmlTableStart); // 生成表头 tableHtml.Append(htmlHeaderRowStart); foreach (DataColumn column in table.Columns) { tableHtml.Append(htmlTdStart).Append(column.ColumnName).Append(htmlTdEnd); } tableHtml.Append(htmlHeaderRowEnd); // 生成表行数据 foreach (DataRow row in table.Rows) { tableHtml.Append(htmlTrStart); foreach (var item in row.ItemArray) { tableHtml.Append(htmlTdStart).Append(item ?? "").Append(htmlTdEnd); } tableHtml.Append(htmlTrEnd); } tableHtml.Append(htmlTableEnd); return tableHtml.ToString(); }
关键改进点
- 代码复用:将单表生成逻辑提取为私有方法,避免重复代码,后续扩展多表更方便
- 空值处理:新增对DataTable为null的判断,同时处理空表场景,每个表有独立的空数据提示
- 标题区分:给两个表格添加不同的标题,方便邮件接收者区分
- 性能优化:改用
StringBuilder拼接字符串,避免多次字符串拼接带来的性能损耗 - 异常提示:异常返回具体错误信息,便于排查问题
内容的提问来源于stack exchange,提问作者user20807956
相关产品推荐
相关产品推荐

