2014-05-05 63 views
0

我有以下用於將DataBable轉換爲純文本以便在電子郵件中呈現的例程。但是,從包含的佈局圖像中可以看到,標題行與列數據不一致。有沒有辦法讓它正確對齊?美化純文本電子郵件中的表格佈局

enter image description here

Function MakeHtmlEmailFromDataTable(dt As DataTable) As System.Text.StringBuilder 
    Dim retVal As String = "" 
    Dim html As New System.Text.StringBuilder 

    For Each col As System.Data.DataColumn In dt.Columns 
     html.Append(col.Caption & vbTab & vbTab) 
    Next 

    For Each dr As System.Data.DataRow In dt.Rows 

     For i = 0 To dr.ItemArray.Length - 1 
      html.Append(dr.ItemArray(i).ToString & vbTab & vbTab & vbTab & vbTab) 
     Next 
     html.Append(vbTab & vbCrLf) 
    Next 

    Return html 
End Function 
+0

也許嘗試使用另一種字體 - 快遞新。我忘了,但FixedLen或non-truetype - 東西 –

+0

@AnthonyHome大聲笑多少個線程你回答今天夥計你的手指必須靠近bleaking大聲笑它出去一個webserice的電子郵件,以避免身份驗證問題,所以不認爲我可以控制字體 – rogue39nin

+0

是的 - 等待DNN完成下載需要測試從V5升級到V7。令人興奮的... –

回答

0

我注意到的第一件事是,你必須在標題欄之間的兩個標籤,與列之間的四個選項卡中的數據。

但是更深層次,純文本不會自動遵守制表位來製作列。您可以解決這個問題的唯一方法是,如果您對數據的使用時間有一定的瞭解,那麼相對於製表位的時間長度而言。這意味着你有一個很大的問題,因爲可以在不同的系統上設置不同的製表位,甚至在同一個系統中的不同應用程序中。即使您對數據寬度有完美的理解,具有奇怪製表符大小的情況也會讓您失望。製表符停止機制唯一的辦法就是使用固定寬度字體,並且數據長度完全相同,或者如果可以保證在什麼操作系統上使用電子郵件客戶端。

你唯一的真正的機會是使用一個系統,實際上允許您定義列,如通過在代碼中的名稱建議的HTML:

Function MakeHtmlEmailFromDataTable(dt As DataTable) As System.Text.StringBuilder 
    Dim html As New System.Text.StringBuilder("<table><thead><tr>") 

    For Each col As System.Data.DataColumn In dt.Columns 
     html.AppendFormat("{0}{1}{2}", "<th>", col.Caption, "</th>") 
    Next 

    html.AppendLine("</tr></thead><tbody>") 

    For Each dr As System.Data.DataRow In dt.Rows 
     html.Append("<tr>") 
     For i = 0 To dr.ItemArray.Length - 1 
      html.AppendFormat("{0}{1}{2}", "<td>", dr.ItemArray(i).ToString(), "</td>") 
     Next 
     html.AppendLine("</tr>") 
    Next 
    html.AppendLine("</tbody></table>") 

    Return html 
End Function 
+0

Coehoom是的,因爲我不知道如何設置寬度,如果我沒有這些標籤,他們都聚集在一起,是我問的問題如何根據列大小和行寬度值更好地佈局 – rogue39nin

+0

它只能是純文本,因爲張貼到電子郵件webservice – rogue39nin

+0

添加一些新的信息給我的答案,你應該閱讀。另外:值得使用的任何電子郵件服務都支持html消息。 –

0

如果不是太多的數據,你可以循環兩次。一旦獲得最大列大小(到數組中)和下一個填充html。然後對於標題你基本上做一箇中間(使標題完全相同的大小)。然後,標題和列之間只有一個單一的。

相關問題