【发布时间】:2026-02-01 10:40:02
【问题描述】:
我目前正在从事一个包含以下项目的项目:
- 一个仅由按钮单击事件填充的网格视图
- 几个按钮将不同的查询传递到数据库并在上述网格视图上显示这些结果
- 将网格视图导出到 excel 按钮
- 和一个发送电子邮件按钮,用于在电子邮件正文中发送 gridview 内容
我的问题是,我不想在电子邮件正文中发送 gridview 内容,而是想将其作为附件发送,但我在这上面花了大约 3 个小时,但不知道该怎么做。另外,如果我有例如 6 个查询按钮,我如何使“发送电子邮件”按钮发送 6 封不同的电子邮件(顺序应该是,按查询按钮,然后按发送电子邮件按钮)以及有关查询的文本已经通过了吗?
我们将不胜感激
这是相关的代码
网格视图代码
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="true"></asp:GridView>
查询按钮
protected void ButtonQ1_Click(object sender, EventArgs e)
{
DataTable dt = new DataTable();
SqlConnection connection = new SqlConnection(GetConnectionString());
connection.Open();
SqlCommand sqlCmd = new SqlCommand("SELECT distinct ITMREF_0 as COD_ART, CPNITMREF_0 as NOME_ART, CPNOPE_0 as TRANS_ART FROM [ERPDQ].[dbo].[DQBOMD] where CPNOPE_0 < 5 or CPNOPE_0 > 20", connection);
SqlDataAdapter sqlDa = new SqlDataAdapter(sqlCmd);
sqlDa.Fill(dt);
if (dt.Rows.Count > 0)
{
GridView1.DataSource = dt;
GridView1.DataBind();
}
connection.Close();
}
导出到excel按钮
protected void Buttonexcel_Click(object sender, EventArgs e)
{
try
{
Response.Clear();
Response.Buffer = true;
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Response.Charset = "";
Response.AddHeader("content-disposition", "attachment;filename=dados.xls");
StringWriter sWriter = new StringWriter();
HtmlTextWriter hWriter = new HtmlTextWriter(sWriter);
GridView1.RenderControl(hWriter);
Response.Output.Write(sWriter.ToString());
Response.Flush();
Response.End();
}
catch (Exception ex)
{
Label1.Text = ex.ToString();
}
}
发送电子邮件按钮
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);
}
}
}
【问题讨论】:
标签: c# asp.net excel email gridview