2013-10-08 142 views
2

我正在開發一個在線訂購Web應用程序,我必須通過電子郵件向客戶發送產品詳細信息。我有保持在一個數據表中的所有數據,然後務實地生成網格視圖如下如何通過格式化發送電子郵件中的gridview

public GridView makeGridview(DataTable Dt) 
     { 
      GridView GV = new GridView(); 
      GV.DataSource = Dt; 
      GV.DataBind(); 
      return GV; 
     } 

然後加入這一網格視圖以電子郵件

body = body.Replace("{Product_Details}", GridViewToHtml(makeGridview(Dt))); 

private string GridViewToHtml(GridView gv) 
     { 
      StringBuilder sb = new StringBuilder(); 
      StringWriter sw = new StringWriter(sb); 
      HtmlTextWriter hw = new HtmlTextWriter(sw); 
      gv.RenderControl(hw); 
      return sb.ToString(); 
     } 

這是工作正常,但問題是,然後我無法按照我們的預定義格式進行設計。此郵件將由我的網站的客戶收到,所以我需要將其轉換爲我們的郵件。 請指導我如何格式化他們。

如果還有另一種方法可以做到這一點,那麼我對此也是開放的。

+0

導出HTML表格('RenderControl')併發送 –

回答

0

關注follwing代碼:

public void SendHTMLMail() 
{ 
MailMessage Msg = new MailMessage(); 
MailAddress fromMail = new MailAddress("[email protected]"); 
// Sender e-mail address. 
Msg.From = fromMail; 
// Recipient e-mail address. 
Msg.To.Add(new MailAddress("[email protected]")); 
// Subject of e-mail 
Msg.Subject = "Send Gridivew in EMail"; 
Msg.Body += "Please check below data <br/><br/>"; 
Msg.Body += GetGridviewData(gvUserInfo); 
Msg.IsBodyHtml = true; 
string sSmtpServer = ""; 
sSmtpServer = "10.2.160.101"; 
SmtpClient a = new SmtpClient(); 
a.Host = sSmtpServer; 
a.EnableSsl = true; 
a.Send(Msg); 
} 
// This Method is used to render gridview control 
public string GetGridviewData(GridView gv) 
{ 
StringBuilder strBuilder = new StringBuilder(); 
StringWriter strWriter = new StringWriter(strBuilder); 
HtmlTextWriter htw = new HtmlTextWriter(strWriter); 
gv.RenderControl(htw); 
return strBuilder.ToString(); 
} 

請參考下doccument:

http://www.aspdotnet-suresh.com/2012/09/how-to-send-gridview-in-email-body-in.html

1

我建議你不信任的GridView爲您呈現的HTML,而是使用您當前的數據源(DataTable):

public GridView CreateHtmlTable(DataTable dt) 
    { 
     //Do your HTML work here, like the following: 
     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>"); 
    } 
0

老實說,你在這裏所做的(將Web窗體控件渲染爲電子郵件字符串)看起來有點意外。老實說,遍歷集合並使用StringBuilder構建HTML表格並不難。

我相信對於電子郵件HTML,約定通常使用內聯樣式來保證與電子郵件客戶端的最佳兼容性。所以,你會想你的風格元素,像這樣:

<table> 
    <tbody> 
    <tr style="background-color: #EE0000"> 
     <td style="text-transform: uppercase"></td> 
     ... 
    </tr> 
    </tbody> 
</table> 

在過去,我已經通過創建的一切,一個HTML文件,我怎麼想它,並使用像{VariableName}佔位符,然後做一個字符串替換上做到了這一點變量與它們的值。這樣您可以將HTML視圖與C#代碼分開。這對於項目列表會有點棘手,在這種情況下,您至少需要兩個HTML模板:一個用於整個文檔,一個用於項目行。

相關問題