2012-06-20 5 views
2

發送電子郵件我正在使用MailMessage創建一封電子郵件,並且希望嵌入一張動態填充的表格。我已將MailMessage屬性設置爲IsBodyHtml,所以我已經能夠將HTML編碼文本插入到電子郵件的正文中。使用它可以輕鬆創建表格的頂部和底部,但創建行看起來像是一個噩夢。

該表將有6列和可變數量的行將從一個集合填充。請求者不希望將數據作爲附件發送。

關於如何最好地開發更好的解決方案的任何建議?

在此先感謝

回答

1

這真的不是一個StringBuilder噩夢都沒有。

你可以建立一個類,將其稱爲TableBuilder或任何你想要的,將封裝這個邏輯。

public class TableBuider 
    { 

     private StringBuilder builder = new StringBuilder(); 


     public string[] BodyData { get; set; } 
     public int BodyRows { get; set; } 


     public TableBuider(int bodyRows, string[] bodyData) 
     { 
      BodyData = bodyData; 
      BodyRows = bodyRows; 
     } 

     /// <summary> 
     /// Since your table headers are static, and your table body 
     /// is variable, we don't need to store the headers. Instead 
     /// we need to know the number of rows and the information 
     /// that goes in those rows. 
     /// </summary> 
     public TableBuider(string[] tableInfo, int bodyRows) 
     { 
      BodyData = tableInfo; 
      BodyRows = bodyRows; 
     } 

     public string BuildTable() 
     { 
      BuildTableHead(); 
      BuildTableBody(); 
      return builder.ToString(); 
     } 

     private void BuildTableHead() 
     { 
      builder.Append("<table>"); 
      builder.Append("<thead>"); 
      builder.Append("<tr>"); 
      AppendTableHeader("HeaderOne"); 
      AppendTableHeader("HeaderTwo"); 
      builder.Append("</tr>"); 
      builder.Append("</thead>"); 
     } 

     private void BuildTableBody() 
     { 
      builder.Append("<tbody>"); 
      builder.Append("<tr>"); 
      // For every row we need added, append a <td>info</td> 
      // to the table from the data we have 
      for (int i = 0; i < BodyRows; i++) 
      { 
       AppendTableDefinition(BodyData[i]); 
      } 
      builder.Append("</tr>"); 
      builder.Append("</table"); 
     } 

     private void AppendTableHeader(string input) 
     { 
      AppendTag("th", input); 
     } 

     private void AppendTableDefinition(string input) 
     { 
      AppendTag("td", input); 
     } 

     private void AppendTag(string tag, string input) 
     { 
      builder.Append("<" + tag + ">"); 
      builder.Append(input); 
      builder.Append("</" + tag + ">"); 
     } 

    } 
} 

AppendTableHeaderAppendTableDefinition,和AppendTag方法封裝所有StringBuilder的繁瑣部件。

這只是一個基本的例子,你也可以建立它。

+0

我剛剛更新了我的TableBuilder類,以更具體地滿足您的需求。這個類的頭部是硬編碼的,因爲你提到它們總是一樣的。但是,由於行是可變的,因此該類將佔用行數和將填充其中的數據。我希望這有幫助! –