Introduzione
Vedremo una tecnica di come inviare un email, in cui nel corpo del messaggio è presente il controllo gridview.
Va ricordato che l’email dev’essere spedita in formata html, l’email che si riceverà è simile a quella inviata nella figura 1
Figura 1
Creazione del progetto
Dopo aver creato un progetto di tipo Web application, inserire nel progetto un controllo gridview ed un pulsante, il quale avrà il compito di inviare l’email.
Stesura del codice
Ora passiamo in visualizzazione codice, prima di tutto, dobbiamo aggiungere gli spazi dei nomi per la gestione dell’email e dei dati.
Di seguito si riporta lo spazio dei nomi per il linguaggio di programmazione VB.Net e C#
VB.Net
Imports System.Data
Imports System.Net
Imports System.Net.Mail
C#
using System.Data;
using System.Net;
using System.Net.Mail;
Occorre fare l’ovveride dell’evento VerifyRenderingInServerForm in questo modo possiamo ottenere il codice html del controllo gridview.
Di seguito si riporta la sintassi di tale operazione.
VB.Net
Public Overloads Overrides Sub VerifyRenderingInServerForm(ByVal control As Control)
Exit Sub
End Sub
C#
public override void VerifyRenderingInServerForm(Control control)
{
return;
}
In questo modo, non verrà generata nessuna eccezione
Ora dobbiamo creare la funzione per il caricamento dei dati nella griglia.
Qui di seguito la funzione per il caricamento dei dati per il controllo GridView
VB.Net
Private Sub CaricaDati()
Dim Nome As New DataColumn("Nome")
Dim Cognome As New DataColumn("Cognome")
Dim riga As DataRow
Dim dttTabella As New DataTable()
dttTabella.Columns.Add(Nome)
dttTabella.Columns.Add(Cognome)
riga = dttTabella.NewRow()
riga(0) = "EMa"
riga(1) = "Maffei"
dttTabella.Rows.Add(riga)
riga = dttTabella.NewRow()
riga(0) = "EMa2"
riga(1) = "maffei3"
dttTabella.Rows.Add(riga)
riga = dttTabella.NewRow()
riga(0) = "EMa3"
riga(1) = "maffei2"
dttTabella.Rows.Add(riga)
GridView1.DataSource = dttTabella
GridView1.DataBind()
End Sub
C#
private void CaricaDati()
{
DataColumn Nome = new DataColumn("Nome");
DataColumn Cognome = new DataColumn("Cognome");
DataRow riga;
DataTable dttTabella = new DataTable();
dttTabella.Columns.Add(Nome);
dttTabella.Columns.Add(Cognome);
riga = dttTabella.NewRow();
riga[0] = "EMa";
riga[1] = "Maffei";
dttTabella.Rows.Add(riga);
riga = dttTabella.NewRow();
riga[0] = "EMa2";
riga[1] = "maffei3";
dttTabella.Rows.Add(riga);
riga = dttTabella.NewRow();
riga[0] = "EMa3";
riga[1] = "maffei2";
dttTabella.Rows.Add(riga);
GridView1.DataSource = dttTabella;
GridView1.DataBind();
}
Questa funzione verrà richiamata nell’evento load della form
Ora dobbiamo creare una funzione, che converte il controllo griglia in html, o meglio una stringa con al suo interno del codice html.
Qui di seguito si riporta la funzione che estrapola dal controllo griglia il codice html.
VB.Net
Private Function TrasformaInTesto() As String
Dim Testo As String = [String].Empty
Dim sw As New System.IO.StringWriter()
Dim hw As New HtmlTextWriter(sw)
Try
hw.RenderBeginTag(HtmlTextWriterTag.Html)
hw.RenderBeginTag(HtmlTextWriterTag.Body)
GridView1.RenderControl(hw)
hw.RenderEndTag()
hw.RenderEndTag()
hw.Flush()
Testo = sw.ToString()
Finally
hw.Close()
> sw.Close()
End Try
Return Testo
End Function
C#
private string TrasformaInTesto()
{
string Testo = String.Empty;
System.IO.StringWriter sw = new System.IO.StringWriter();
HtmlTextWriter hw = new HtmlTextWriter(sw);
try
{
hw.RenderBeginTag(HtmlTextWriterTag.Html);
hw.RenderBeginTag(HtmlTextWriterTag.Body);
GridView1.RenderControl(hw);
hw.RenderEndTag();
hw.RenderEndTag();
hw.Flush();
Testo = sw.ToString();
}
finally
{
hw.Close();
sw.Close();
}
return Testo;
}
A questo punto siamo giunti quasi alla conclusione di questo articolo. Ora non resta che scrivere il codice per l’invio dell’email, che verrà applicato al controllo pulsante.
Dopo aver rilevato il testo html del controllo griglia, tramite l’oggetto di tipo MailMessage, impostiamo gli indirizzi email di colui che invia, riceve l’email, il testo dell’oggetto dell’email ed il testo del corpo. La proprietà ISBodyHtml impostata a True, permette di inviare l’email in formato html e quindi il destinatario visualizzerà nel corpo del messaggio, la griglia come si vede nella pagina web.
Tramite l’oggetto di tipo SmtpClient, dopo aver impostato il server email, utilizzando il metodo send viene iinviato il messaggio.
Qui di seguito il codice di tali operazioni.
VB.Net
Protected Sub BtnInvia_Click(ByVal sender As Object, ByVal e As EventArgs) Handles BtnInvia.Click
Dim testo As String = TrasformaInTesto()
Dim email As New MailMessage("
emanuelemattei@dominio.it", "
emanuelemattei@dominio.it ", "Oggetto", testo)
email.IsBodyHtml = True
Dim smtp As New SmtpClient("ServerMail")
Try
smtp.Send(email)
Catch ex As Exception
Response.Write(ex.Message)
End Try
End Sub
C#
protected void Button1_Click(object sender, EventArgs e)
{
string testo = TrasformaInTesto();
MailMessage email = new MailMessage("
emanuelemattei@dominio.it ", "
emanuelemattei@dominio.it ", "Oggetto", testo);
email.IsBodyHtml = true;
SmtpClient smtp = new SmtpClient("ServerMail");
try
{
smtp.Send(email);
}
catch (Exception ex)
{
Response.Write(ex.Message);
}
}
Conclusioni
Abbiamo visto come inviare tramite email, le informazioni contenute in un controllo griglia, riportando nel corpo del messaggio il medesimo controllo. Tramite la parola download potete scaricare il file di progetto per entrambi i linguaggi.
Download