【发布时间】:2016-05-22 03:56:34
【问题描述】:
我想使用asp:button从我的 Exchange (outlook) 帐户通过电子邮件发送GridView。
我的代码运行良好,但电子邮件中的 GridView 松散了格式(颜色、列粗细等)。
这是代码:
using System.Net;
using Outlook = Microsoft.Office.Interop.Outlook;
protected void Send_Click(object sender, EventArgs e)
{
try
{
// Create a Outlook Application and connect to outlook
Outlook.Application OutlookApplication = new Outlook.Application();
// create the MailItem which we want to send
Outlook.MailItem message = (Outlook.MailItem)OutlookApplication.CreateItem(Outlook.OlItemType.olMailItem);
MailAddress toAddress = new MailAddress("myemail@gmail.com");
MailAddress ccAddress = new MailAddress("myemail@mycompany.com");
message.To = toAddress.ToString();
message.CC = ccAddress.ToString();
message.Subject = "Mail Subject";
message.HTMLBody = GridViewToHtml(HourlyReportGV1);
message.BodyFormat = Outlook.OlBodyFormat.olFormatHTML;
//Send email
message.Send();
}
catch (System.Exception ex)
{
Aviso.Text = ex.ToString();
}
}
private string GridViewToHtml(GridView gv)
{
StringBuilder sb = new StringBuilder();
StringWriter sw = new StringWriter(sb);
HtmlTextWriter hw = new HtmlTextWriter(sw);
gv.RenderControl(hw);
return sb.ToString();
}
public override void VerifyRenderingInServerForm(Control control)
{
/* Verifies that the control is rendered */
}
看起来是这样的:
你知道如何让“Email View”和“Web View”一模一样吗?
<asp:GridView style="margin:0 auto; margin-bottom:50px;" HeaderStyle-CssClass="tituloshandoff" RowStyle-CssClass="contenidohandoffbatch" ID="HourlyReportGV1" runat="server" AutoGenerateColumns="False" DataSourceID="Vacio">
<Columns>
<asp:BoundField DataField="IDBatch" HeaderText="ID" SortExpression="IDBatch" HeaderStyle-CssClass="TituloInvisible" ItemStyle-CssClass="TituloInvisible"/>
<asp:BoundField DataField="DealerCodigo" HeaderText="CODE" SortExpression="DealerCodigo"/>
<asp:BoundField DataField="DealerDescripcion" HeaderText="NAME" SortExpression="DealerDescripcion"/>
<asp:TemplateField HeaderText="00:00"><ItemTemplate><asp:TextBox runat="server" ID="Cero" Width="70px"></asp:TextBox></ItemTemplate></asp:TemplateField>
<asp:TemplateField HeaderText="01:00"><ItemTemplate><asp:TextBox runat="server" ID="Una" Width="70px"></asp:TextBox></ItemTemplate></asp:TemplateField>
<asp:TemplateField HeaderText="02:00"><ItemTemplate><asp:TextBox runat="server" ID="Dos" Width="70px"></asp:TextBox></ItemTemplate></asp:TemplateField>
<asp:TemplateField HeaderText="03:00"><ItemTemplate><asp:TextBox runat="server" ID="Tres" Width="70px"></asp:TextBox></ItemTemplate></asp:TemplateField>
<asp:TemplateField HeaderText="04:00"><ItemTemplate><asp:TextBox runat="server" ID="Cuatro" Width="70px"></asp:TextBox></ItemTemplate></asp:TemplateField>
<asp:TemplateField HeaderText="05:00"><ItemTemplate><asp:TextBox runat="server" ID="Cinco" Width="70px"></asp:TextBox></ItemTemplate></asp:TemplateField>
<asp:TemplateField HeaderText="06:00"><ItemTemplate><asp:TextBox runat="server" ID="Seis" Width="70px"></asp:TextBox></ItemTemplate></asp:TemplateField>
<asp:TemplateField HeaderText="07:00"><ItemTemplate><asp:TextBox runat="server" ID="Siete" Width="70px"></asp:TextBox></ItemTemplate></asp:TemplateField>
<asp:TemplateField HeaderText="08:00"><ItemTemplate><asp:TextBox runat="server" ID="Ocho" Width="70px"></asp:TextBox></ItemTemplate></asp:TemplateField>
<asp:TemplateField HeaderText="09:00"><ItemTemplate><asp:TextBox runat="server" ID="Nueve" Width="70px"></asp:TextBox></ItemTemplate></asp:TemplateField>
<asp:TemplateField HeaderText="10:00"><ItemTemplate><asp:TextBox runat="server" ID="Diez" Width="70px"></asp:TextBox></ItemTemplate></asp:TemplateField>
<asp:TemplateField HeaderText="11:00"><ItemTemplate><asp:TextBox runat="server" ID="Once" Width="70px"></asp:TextBox></ItemTemplate></asp:TemplateField>
</Columns>
</asp:GridView>
【问题讨论】:
-
你能给我们看看GridView的标记吗?
-
你的意思是代码吗?对不起,我来自阿根廷,我不知道你在说什么“标记”。编辑:我现在正在阅读“GridView Skins”。我不知道。
-
您的更新就是我所说的(ASPX 文件中的 HTML 或伪 HTML 代码)。至于您的问题,CSS 样式(
tituloshandoff、contenidohandoffbatch)未在电子邮件中发送,因此无法在邮件中应用它们的格式选项。您可以尝试在标记中设置单个属性,以查看消息是否可以使用它们(例如HeaderStyle-BackColor="Orange" RowStyle-Height="24")。 -
明白。让我试试,我会告诉你的。谢谢!
-
我尝试了你的推荐,它工作正常。我在这里只需要一个帮助: - gridview 正在显示来自数据库的信息。要使用它,我需要为 GridView 中的每个项目提取“ID”。这就是我使用“ID”列的原因。但我需要它在网络表单和电子邮件中是不可见的。我可以在网络表单中不可见,但使用 css。电子邮件不包含 css 信息,然后显示此列。我该如何解决?
标签: c# asp.net email gridview outlook