使用C#从DataTable创建HTML

l--*_*''' 8 .net c# datatable outlook

我需要能够将HTML数据传递到Outlook中,如下所示:

MailMessage message = new MailMessage();
message.Body = myBody;
Run Code Online (Sandbox Code Playgroud)

最初,我以为我可以将纯文本传递给它并使用PadLeft如下:

somestring.PadLeft(100);
Run Code Online (Sandbox Code Playgroud)

但它并没有对准一切正常,因为即使|||||MMMMM均只有5字符长,他们身体在屏幕上占用更多的空间.

我的解决方案是将我的数据表中的数据转换为HTML表,然后将其传递给Outlook.

  1. 如何将数据表转换为html表?
  2. 我的问题有更好的解决方案吗?

mse*_*dio 16

循环遍历DataTable,并构建html字符串.IE:

DataTable dt = new DataTable();

dt.Columns.Add("col1");
dt.Columns.Add("col2");
dt.Columns.Add("col3");
dt.Rows.Add(new object[] { "a", "b", "c" });
dt.Rows.Add(new object[] { "d", "e", "f" });

string tab = "\t";

StringBuilder sb = new StringBuilder();

sb.AppendLine("<html>");
sb.AppendLine(tab + "<body>");
sb.AppendLine(tab + tab + "<table>");

// headers.
sb.Append(tab + tab + tab + "<tr>");

foreach (DataColumn dc in dt.Columns)
{        
    sb.AppendFormat("<td>{0}</td>", dc.ColumnName);        
}

sb.AppendLine("</tr>");

// data rows
foreach (DataRow dr in dt.Rows)
{
    sb.Append(tab + tab + tab + "<tr>");

    foreach (DataColumn dc in dt.Columns)
    {
        string cellValue = dr[dc] != null ? dr[dc].ToString() : "";
        sb.AppendFormat("<td>{0}</td>", cellValue);
    }

    sb.AppendLine("</tr>");
}

sb.AppendLine(tab + tab + "</table>");
sb.AppendLine(tab + "</body>");
sb.AppendLine("</html>");
Run Code Online (Sandbox Code Playgroud)


And*_*lar 6

我只想分享我的所作所为.我希望这会有所帮助.

using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.IO;

public void Build(DataSet ds) 
{
    StringWriter sw = new StringWriter();
    HtmlTextWriter w = new HtmlTextWriter(sw);

    foreach (DataTable dt in ds.Tables) 
    {
        //Create a table
        Table tbl = new Table();

        //Create column header row
        TableHeaderRow thr = new TableHeaderRow();
        foreach (DataColumn col in dt.Columns) {
            TableHeaderCell th = new TableHeaderCell();
            th.Text = col.Caption;
            thr.Controls.Add(th);
        }
        tbl.Controls.Add(thr);

        //Create table rows
        foreach (DataRow row in dt.Rows)
        {
            TableRow tr = new TableRow();
            foreach (var value in row.ItemArray)
            {
                TableCell td= new TableCell();
                td.Text = value.ToString();
                tr.Controls.Add(td);
            }
            tbl.Controls.Add(tr);
        }

        tbl.RenderControl(w);

    }

    Response.Write(sw.ToString());
}
Run Code Online (Sandbox Code Playgroud)