Asp.Net esportare un gridview i Excel o Word con immagine vb.net e C#

Esempio pratico che illustra una tecnica per esportare i dati presenti in un controllo Gridview in formato Word o Excel, comprensive di immagini.

il
Sviluppatore Microsoft .Net, Collaboratore di IProgrammatori

In questo articolo vedremo come tramite linguaggio di programmazione VB.Net e C#, esportiamo in un file di tipo Microsoft Excel o Microsoft Word il contenuto di una griglia o meglio controllo GridView in Microsoft Excel o Microsoft Word.
Apriamo Visual Studio e dopo aver selezionato il linguaggio di propri interesse, selezioniamo il progetto di tipo web.


Stesura del codice

A questo punto inseriamo nella pagina un controllo gridview, con due colonne di tipo boundfield ed una di tipo imagefield. Inseriamo anche due controlli di tipo button, che tramite l’evento click esportano in formato Word o in formato Excel, il contenuto della griglia.
Qui di seguito si riporta il markup html

<asp:GridView ID="GridView1" runat="server" CssClass="Gridview" AutoGenerateColumns="False">
<HeaderStyle CssClass="headerstyle" />
<Columns>
<asp:BoundField HeaderText="Id" DataField="Id" />
<asp:BoundField HeaderText="Nome" DataField="Nome" />
<asp:ImageField DataImageUrlField="PercorsoImmagine" HeaderText="Immagine" ItemStyle-Height="15px" ItemStyle-Width="15px" />
</Columns>
</asp:GridView>
<asp:Button ID="BtnExcel" runat="server" Text="Excel" OnClick="BtnExcel_Click" />
&nbsp;<asp:Button ID="BtnWord" runat="server" Text="Word" OnClick="BtnWord_Click" />

Si passa in visualizzazione codice, nel quale andiamo a scrivere il codice per la valorizzazione della griglia e poi successivamente al click del pulsante, esportare i dati.

Scriviamo il codice che serve per il render della griglia o meglio quell’evento quando si deve esportare tramite response.write lo stream dati.

VB.Net
Public Overrides Sub VerifyRenderingInServerForm(ByVal control As Control)
End Sub
C#
public override void VerifyRenderingInServerForm(Control control)
{
}

Scriviamo ora la funzione che permette di caricare la griglia con dei dati, includendo anche delle immagini, che abbiamo aggiunto al nostro progetto.
Qui di seguito tali dichiarazione per entrambi i linguaggi.

VB.Net
Private Function GetDati() As DataTable
Dim DttDati As New DataTable
Dim ColonnaID As New DataColumn("ID")
Dim ColonnaNome As New DataColumn("NOME")
Dim ColonnaPercorsoImmagine As New DataColumn("PercorsoImmagine")
DttDati.Columns.Add(ColonnaID)
DttDati.Columns.Add(ColonnaNome)
DttDati.Columns.Add(ColonnaPercorsoImmagine)
Dim DtrRiga As DataRow = DttDati.NewRow()
DtrRiga("ID") = 1
DtrRiga("NOME") = "Emanuele"
DtrRiga("PercorsoImmagine") = "http://localhost:60438/Logo1.jpg"
DttDati.Rows.Add(DtrRiga)
DtrRiga = DttDati.NewRow()
DtrRiga("ID") = 2
DtrRiga("NOME") = "Manuel"
DtrRiga("PercorsoImmagine") = "http://localhost:60438/Logo2.png"
DttDati.Rows.Add(DtrRiga)
Return DttDati
End Function
C#
private DataTable GetDati()
{
DataTable DttDati = new DataTable();
DataColumn ColonnaID = new DataColumn("ID");
DataColumn ColonnaNome = new DataColumn("NOME");
DataColumn ColonnaPercorsoImmagine = new DataColumn("PercorsoImmagine");
DttDati.Columns.Add(ColonnaID);
DttDati.Columns.Add(ColonnaNome);
DttDati.Columns.Add(ColonnaPercorsoImmagine);
DataRow DtrRiga = DttDati.NewRow();
DtrRiga["ID"] = 1;
DtrRiga["NOME"] = "Emanuele";
DtrRiga["PercorsoImmagine"] = "http://localhost:60438/Logo1.jpg";
DttDati.Rows.Add(DtrRiga);
DtrRiga = DttDati.NewRow();
DtrRiga["ID"] = 2;
DtrRiga["NOME"] = "Manuel";
DtrRiga["PercorsoImmagine"] = "http://localhost:60438/Logo2.jpg";
DttDati.Rows.Add(DtrRiga);
return DttDati;
}

Nel load della pagina, scriviamo il codice che permette di valorizzare la griglia.
Qui di seguito tali dichiarazione.

VB.Net
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
GridView1.DataSource = GetDati()
GridView1.DataBind()
End Sub
C#
protected void Page_Load(object sender, EventArgs e)
{
GridView1.DataSource = GetDati();
GridView1.DataBind();
}

Scriviamo il codice per esportare i dati presenti nella griglia in un file Microsoft Excel comprese l’immagine.
Qui di seguito si riporta il codice da inserire nell’evento click del pulsante per l’esportazione del file in formato Excel

VB.Net
Protected Sub BtnExcel_Click(sender As Object, e As EventArgs) Handles BtnExcel.Click
Response.ClearContent()
Response.Buffer = True
Response.AddHeader("content-disposition", String.Format("attachment; filename={0}", "Esempio.xls"))
Response.ContentType = "application/ms-excel"
Dim sw As New StringWriter()
Dim htw As New HtmlTextWriter(sw)
GridView1.AllowPaging = False
GridView1.DataSource = GetDati
GridView1.DataBind()
GridView1.RenderControl(htw)
Response.Write(sw.ToString())
Response.[End]()
End Sub
C#
protected void BtnExcel_Click(object sender, EventArgs e)
{
Response.ClearContent();
Response.Buffer = true;
Response.AddHeader("content-disposition", string.Format("attachment; filename={0}", "Esempio.xls"));
Response.ContentType = "application/ms-excel";
StringWriter sw = new StringWriter();
HtmlTextWriter htw = new HtmlTextWriter(sw);
GridView1.AllowPaging = false;
GridView1.DataSource = GetDati();
GridView1.DataBind();
GridView1.RenderControl(htw);
Response.Write(sw.ToString());
Response.End();
}

Nel caso che vogliamo esportarlo in formato Word, dobbiamo cambiare il valore nella proprietà ContentType, come riportato qui di seguito.

VB.Net
Protected Sub BtnWord_Click(sender As Object, e As EventArgs) Handles BtnWord.Click
Response.ClearContent()
Response.Buffer = True
Response.AddHeader("content-disposition", String.Format("attachment; filename={0}", "Dati.doc"))
Response.ContentType = "application/ms-word"
Dim sw As New StringWriter()
Dim htw As New HtmlTextWriter(sw)
GridView1.AllowPaging = False
GridView1.DataSource = GetDati()
GridView1.DataBind()
GridView1.RenderControl(htw)
Response.Write(sw.ToString())
Response.[End]()
End Sub
C#
protected void BtnWord_Click(object sender, EventArgs e)
{
Response.ClearContent();
Response.Buffer = true;
Response.AddHeader("content-disposition", string.Format("attachment; filename={0}", "Dati.doc"));
Response.ContentType = "application/ms-word";
StringWriter sw = new StringWriter();
HtmlTextWriter htw = new HtmlTextWriter(sw);
GridView1.AllowPaging = false;
GridView1.DataSource = GetDati();
GridView1.DataBind();
GridView1.RenderControl(htw);
Response.Write(sw.ToString());
Response.End();
}

Conclusioni


L’articolo ha voluto illustrare una tecnica per esportare i dati presenti in un controllo gridview, con una colonna di tipo immagine in un file Word o Excel.
Tecnica che può rilevarsi utile in quelle applicazioni web per la gestione dei dati amministrativi e contabili.