我制作了一个代码,我可以使用c#向gmail.com发送电子邮件,但它运行良好。 现在我想将我的datagridview1放在电子邮件正文中并发送它。 Somone可以告诉我如何做到这一点? 我搜索了很多,但我只发现了无用的信息和asp.net代码。
这是我发送电子邮件的正式代码。 我的datagridview名称是:datagridview1
private void btnSend_Click_1(object sender, EventArgs e)
{
// Create a message with datagridview contents in its body and set up the recipients.
var client = new SmtpClient("smtp.gmail.com", 587);
client.EnableSsl = true;
client.Credentials = new NetworkCredential("jpbritopoker@gmail.com", "*****");
var mail = new MailMessage();
mail.From = new MailAddress("youraccount@yahoo.com");
mail.To.Add("jpbritopoker@gmail.com");
mail.Subject = "This is the subject of the mail";
mail.Body = "Here i want my datagridview1";
client.Send(mail);
}
答案 0 :(得分:3)
DataGridView
是Dot Net的一个特殊工具,您的电子邮件(在浏览器中打开)对此一无所知。
此外,mail.Body
接受字符串值:)。你只是不能为它分配一个完整的datagridview,即
mail.Body = dataGridView1.ToString(); //wrong, utter useless
但是,浏览器确实知道html。让我们做一件事,让我们创建dataGridView
所以你应该做的是遍历GridView的每一行并创建html字符串并将其分配给mail.Body
。
在您的方法中执行以下操作:
private void btnSend_Click_1(object sender, EventArgs e)
{
string mailBody = "<table width='100%' style='border:Solid 1px Black;'>";
foreach (DataGridViewRow row in dataGridView1.Rows)
{
mailBody +="<tr>";
foreach (DataGridViewCell cell in row.Cells)
{
mailBody +="<td stlye='color:blue;'>" +cell.Value + "</td>";
}
mailBody +="</tr>";
}
mailBody +="</table>";
//your rest of the original code
mail.Body = mailBody;
client.Send(mail);
}
答案 1 :(得分:3)
您需要遍历数据网格视图的Rows
集合,提取值并分配给mail.Body
。一个粗略的例子: -
StringBuilder sb = new StringBuilder();
foreach (DataRow row in datagridview1.Rows)
{
sb.AppendLine(row["ROW NAME"].ToString());
}
mail.Body = sb.ToString();
答案 2 :(得分:0)
DataGridView首先是一个WinForm-Control(或:一个对象)。你可以做的是,例如:
遍历dgv的所有数据项,并创建一个表或列表以将其设置为电子邮件正文。
如果您不仅要导出内容而是导出整个对象结构,可以通过序列化将整个对象导出到xml / json。
您还可以将序列化对象添加为电子邮件的附件。