我正在尝试通过电子邮件发送清单,但我无法将这些行排成一行。
string aheading = "Defects:";
string bheading = "Comments:";
string result = aheading.PadRight(20, ' ') + bheading.PadRight(20, ' ') + Environment.NewLine;
foreach (var item in chkList.CheckItems)
{
if (item.Defect == true)
{
result += item.ItemTitle.Trim().PadRight(20,' ') + item.Comment.Trim().PadRight(20,' ') + Environment.NewLine ;
}
}
在数据库中有一个缺陷和注释列表,因此代码循环显示每个缺陷,并在单独的行上发表评论,但它看起来像这样:
Defects: Comments:
Vehicle Secure comment1
Brakes comment2
有没有办法让评论排好?这就像vehicle secure
字符串正在推出评论。可能会有很长的缺陷列表,我不知道每个字符串会有多长,所以我可以将注释设置为显示在某个位置吗?
答案 0 :(得分:3)
将字符串格式化为HTML,然后您可以使用表格进行格式化。 mailmessage有一个属性可以将其内容设置为Html。
var htmlstring = "<table>";
htmlstring += "<tr><th>Header</th><th>Header</th></tr>";
foreach (var row in content)
{
htmlstring += string.Format("<tr><td>text</td><td>{0}</td></tr>", row.data);
}
htmlstring += "</table>";
var message = new MailMessage();
message.IsBodyHtml = true;
message.Body = htmlString;
实施问题中的代码
string aheading = "Defects:";
string bheading = "Comments:";
string result = string.Format("<table><tr><th>{0}</th><th>{1}</th></tr>", aheading, bheading);
foreach (var item in chkList.CheckItems)
{
if (item.Defect == true)
{
result += string.Format("<tr><td>{0}</td><td>{1}</td></tr>", item.ItemTitle.Trim(), item.Comment.Trim());
}
}
result += "</table>";
var message = new MailMessage();
message.IsBodyHtml = true;
message.Body = result;
// SEND MESSAGE
var client = new SmtpClient("mailhost");
// If auth is needed
client.Credentials = new NetworkCredential("username", "password");
client.Send(message);
答案 1 :(得分:1)
你应该计算字符串的长度。
首先,浏览所有CheckItems
并找到最长的ItemTitle
其次,创建变量padding
以放置最大填充。
最后,您可以使用String.Format
计算每一行的填充string aheading = "Defects:";
string bheading = "Comments:";
int maxlength = 0;
foreach (var item in chkList.CheckItems)
{
if (item.ItemTitle.Length > maxlength)
maxlength = item.ItemTitle.Length;
}
int padding = maxlength + 10; //10 spaces between the longest 'Defects' and its 'Comments'
string format = "{0,-" + padding + "} {1,-" + padding + "}\r\n"
string result = String.Format(format, "Defects:", "Comments:");
foreach (var item in chkList.CheckItems)
{
if (item.Defect == true)
{
result += String.Format(format, item.ItemTitle, Item.Comment);
}
}
注意强>
当前字体中的每个字符都应具有相同的宽度。
您应该在邮件中使用Monospaced Font来使其正常运行。
如果您希望它适用于所有字体。请改为@ Gelootn的答案。
答案 2 :(得分:1)
使用String.Format,而不是.padright。
创建一个字符串,例如:
string title = String.Format("{0,-10} {1,-10}\n", "Defects:", "Comments:");
然后在你的循环中使用:
string result = String.Format("{0,-10} {1,-10}\n", item.ItemTitle, item.Comment);
您必须调整值才能让它看起来很满意。