giovedì 28 settembre 2017

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

Si riporta l'articolo scritto per il sito http://www.iprogrammatori.it/articoli/programmazione/art_aspnet-esportare-un-gridview-i-excel-o-w_1533.aspx


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" />

             <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.

Nessun commento: