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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 11:40:24