2

を使用してメールを作成していますMailMessageが、動的に入力されたテーブルを埋め込みたいと考えています。MailMessageプロパティをに設定したIsBodyHtmlので、HTMLでエンコードされたテキストを電子メールの本文に挿入できました。これを使用すると、テーブルの上部と下部を簡単に作成できますが、行を作成するのはStringBuilder悪夢のようです。

テーブルには、6つの列と、コレクションから入力される可変数の行が含まれます。リクエスターは、データを添付ファイルとして送信しないことを希望します。

より良いソリューションを開発するための最良の方法に関する提案はありますか?

前もって感謝します

4

2 に答える 2

2

それは本当に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 + ">");
        }

    }
}

、、、およびメソッドAppendTableHeaderは、の面倒な部分をすべてカプセル化します。AppendTableDefinitionAppendTagStringBuilder

これも基本的な例であり、それに基づいて構築することもできます。

于 2012-06-20T15:46:10.980 に答える
0

この記事はライトスイッチ固有のものです。ただし、サンプルコードは、XHTMLと埋め込みLINQ式を使用して、HTMLメールの可変行テーブルにデータを入力する方法を示しています。アプリケーションに合わせて調整できるはずだと思います。

http://blogs.msdn.com/b/bethmassi/archive/2011/01/27/how-to-send-html-email-from-a-lightswitch-application.aspx

于 2012-06-20T15:09:43.840 に答える