C# 将gridview作为excel附件发送
我目前正在从事一个项目,该项目包括以下项目:C# 将gridview作为excel附件发送,c#,asp.net,excel,email,gridview,C#,Asp.net,Excel,Email,Gridview,我目前正在从事一个项目,该项目包括以下项目: 一个仅由按钮单击事件填充的gridview 几个按钮将不同的查询传递到数据库,并在上面提到的gridview上显示这些结果 “将网格视图导出到excel”按钮 以及发送电子邮件按钮,用于发送电子邮件正文中的gridview内容 我的问题是,我不想在电子邮件正文中发送gridview内容,而是想将其作为附件发送,但我在这方面花了大约3个小时,不知道怎么做。另外,如果我有6个查询按钮,我如何让“发送电子邮件”按钮发送6封不同的电子邮件(顺序应该是,按
- 一个仅由按钮单击事件填充的gridview
- 几个按钮将不同的查询传递到数据库,并在上面提到的gridview上显示这些结果
- “将网格视图导出到excel”按钮
- 以及发送电子邮件按钮,用于发送电子邮件正文中的gridview内容
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="true"></asp:GridView>
发送电子邮件按钮
protected void Buttonmail_Click(object sender, EventArgs e)
{
using (StringWriter sw = new StringWriter())
{
using (HtmlTextWriter hw = new HtmlTextWriter(sw))
{
GridView1.RenderControl(hw);
StringReader sr = new StringReader(sw.ToString());
MailMessage mm = new MailMessage("sender@gmail.com", "receiver@gmail.com");
mm.Subject = "GridView Email";
mm.Body = "GridView:<hr />" + sw.ToString(); ;
mm.IsBodyHtml = true;
SmtpClient smtp = new SmtpClient();
smtp.Host = "smtp.gmail.com";
smtp.EnableSsl = true;
System.Net.NetworkCredential NetworkCred = new System.Net.NetworkCredential();
NetworkCred.UserName = "sender@gmail.com";
NetworkCred.Password = "***";
smtp.UseDefaultCredentials = true;
smtp.Credentials = NetworkCred;
smtp.Port = 587;
smtp.Send(mm);
}
}
}
受保护的无效按钮邮件单击(对象发送者,事件参数e)
{
使用(StringWriter sw=new StringWriter())
{
使用(HtmlTextWriter hw=新的HtmlTextWriter(sw))
{
GridView1.渲染控制(hw);
StringReader sr=新的StringReader(sw.ToString());
MailMessage mm=新邮件(“sender@gmail.com", "receiver@gmail.com");
mm.Subject=“GridView电子邮件”;
mm.Body=“GridView:
”+sw.ToString();
mm.IsBodyHtml=true;
SmtpClient smtp=新SmtpClient();
smtp.Host=“smtp.gmail.com”;
smtp.EnableSsl=true;
System.Net.NetworkCredential NetworkCred=新系统.Net.NetworkCredential();
NetworkCred.UserName=”sender@gmail.com";
NetworkCred.Password=“***”;
smtp.UseDefaultCredentials=true;
smtp.Credentials=NetworkCred;
smtp.Port=587;
smtp.Send(mm);
}
}
}
创建excel文件后,您需要在服务器上本地保存该文件,然后才能将该文件附加到电子邮件中
至于根据所单击的内容发送电子邮件,您需要将电子邮件代码分离到具有一些输入参数(to、from、body、file)的自己的方法中,并让不同的按钮使用适当的值调用该方法
假设您创建了一个按钮,该按钮生成一个名为“export1”的excel文件。在按钮中创建该文件后,单击可以调用sendmail方法并将export1文件路径作为文件传递给它。在email方法中,您可以将该文件附加到电子邮件中
如果这不清楚或没有为您设置正确的路径,请告诉我,我将为您设置一些代码示例。我的建议是将HTML保存到一个临时文件中,然后在每封电子邮件中将其作为附件使用。以下代码类似于我用来生成临时文件的代码:
string fileName = System.IO.Path.GetTempPath() + Guid.NewGuid().ToString() + ".csv"
然后将Excel文件的路径传递给不同的函数调用。我是c#/asp.net新手,但如果我解释事件的顺序(至少对我来说是有意义的),可能会让事情更清楚:
- 按查询按钮,并在唯一的gridview I上显示结果 使用(或者可能使用特定的名称在本地保存)该文件 将文件作为已传递查询的结果发出信号)
- 用户可以将gridview导出到excel(这非常有效)或发送 将其作为excel文件保存在电子邮件附件中
protected void Buttonmail_Click(object sender, EventArgs e)
{
using (StringWriter sw = new StringWriter())
{
using (HtmlTextWriter hw = new HtmlTextWriter(sw))
{
GridView1.RenderControl(hw);
StringReader sr = new StringReader(sw.ToString());
MailMessage mm = new MailMessage("sender@gmail.com", "receiver@gmail.com");
mm.Subject = "GridView Email";
mm.Body = "GridView:<hr />" + sw.ToString(); ;
mm.IsBodyHtml = true;
SmtpClient smtp = new SmtpClient();
smtp.Host = "smtp.gmail.com";
smtp.EnableSsl = true;
System.Net.NetworkCredential NetworkCred = new System.Net.NetworkCredential();
NetworkCred.UserName = "sender@gmail.com";
NetworkCred.Password = "***";
smtp.UseDefaultCredentials = true;
smtp.Credentials = NetworkCred;
smtp.Port = 587;
smtp.Send(mm);
}
}
}
string fileName = System.IO.Path.GetTempPath() + Guid.NewGuid().ToString() + ".csv"
<div>
<table cellspacing="0" rules="all" border="1" id="ctl00_rightcontent_GridView1" style="border-collapse:collapse;">
<tr>
<th scope="col">COD_ART</th><th scope="col">NOME_ART</th><th scope="col">TRANS_ART</th>
</tr><tr>
<td>numbers</td><td>numbers</td><td>numbers</td>
</tr><tr>.........
</form>
</div>
</div>
protected void Buttonmail_Click(object sender, EventArgs e)
{
fn_AttachGrid();
}
public void fn_AttachGrid()
{
StringWriter sWriter = new StringWriter();
HtmlTextWriter hWriter = new HtmlTextWriter(sWriter);
GridView1.RenderControl(hWriter);
Response.Output.Write(sWriter.ToString());
MailMessage mail = new MailMessage();
mail.IsBodyHtml = true;
mail.To.Add(new MailAddress("receiver@domain.pt"));
mail.Subject = "Sales Report";
System.Text.Encoding Enc = System.Text.Encoding.ASCII;
byte[] mBArray = Enc.GetBytes(sWriter.ToString());
System.IO.MemoryStream mAtt = new System.IO.MemoryStream(mBArray, false);
mail.Attachments.Add(new Attachment(mAtt, "dad.xls"));
mail.Body = "Hi PFA";
SmtpClient smtp = new SmtpClient();
mail.From = new MailAddress("sender@gmail.com", "name");
smtp.Host = "smtp.gmail.com";
smtp.UseDefaultCredentials = true;
System.Net.NetworkCredential NetworkCred = new System.Net.NetworkCredential();
NetworkCred.UserName = "sender@gmail.com";
NetworkCred.Password = "password";
smtp.Credentials = NetworkCred;
smtp.EnableSsl = true;
smtp.Port = 587;
smtp.Send(mail);
Label1.Text = "Email Sent";
}