martedì 20 aprile 2010

Asp.net inviare tramite email un gridView (VB.Net e C#)

Riporto l'articolo scritto per il sito http://www.iprogrammatori.it/articoli/programmazione/art_aspnet-inviare-tramite-email-i-dati-di-u_873.aspx


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






Nessun commento: