mercoledì 6 maggio 2009

Asp.Net applicare in un controllo GridView, un linkbutton per esportare in Excel

Riporto l'articolo scritto per il sito http://www.iprogrammatori.it/articoli/programmazione/art_inserire-un-linkbutton-nel-footer-del-co_708.aspx riguardante la possibilità di esportare una griglia in formato Excel.



ntroduzione



In questo articolo, vedremo come esportare un controllo gridview in Microsoft Excel 2007, tramite la tecnologia Asp.Net 3.5.



La gridView, sarà dotato di un pulsante nel footer (Figura 1) di tipo linkbutton, il quale avrà il compito di esportare la griglia in formato Excel.







Figura 1






Predisposizione della pagina



Dopo aver selezionato nuovo progetto web, da Visual Studio 2008, entriamo nella parte sorgente html della pagina web, in alto nell'intestazione inseriamo il seguente parametro alla pagina.



EnableEventValidation="false"

Terminato ciò, passiamo in visualizzazione designer, ed inseriamo un controllo gridiview, il controllo gridview avrà due colonne, nella prima verrà visualizzata la descrizione di un determinato prodotto, mentre nella seconda colonna, l'importo di tale prodotto. Dopo aver impostato la proprietà showfooter a true del controllo gridview, passiamo in visualizzazione codice html, per personalizzare le colonne della griglia.



La colonna Descrizione, sarà di tipo template field, mentre la colonna tipo, è di tipo classica, ossia boundfield.



Di seguito si riporta il frammento di codice della griglia.



<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" CellPadding="4"



ForeColor="#333333" GridLines="None" ShowFooter="True">



<RowStyle BackColor="#EFF3FB" />



<Columns>



<asp:TemplateField HeaderText="Descrizione">



<ItemTemplate>



<asp:Label ID="lblDescrizione" Text='' runat="server">asp:Label>



ItemTemplate>



<FooterTemplate>



<asp:LinkButton ID="lnkEsporta" Text="Esporta Excel" runat="server" OnClick="LnkEsportaExcel_Click">asp:LinkButton>



FooterTemplate>



asp:TemplateField>



<asp:BoundField DataField="Importo" HeaderText="Importo" />



Columns>



<FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />



<PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" />



<SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" />



<HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />



<EditRowStyle BackColor="#2461BF" />



<AlternatingRowStyle BackColor="White" />



asp:GridView>








Come si vede, avremmo una colonna di tipo templateField, nella quale si trova un altro oggetto di tipo itemTemplate, al cui interno, un oggetto di tipo label.



La proprietà Text, ossia la visualizzazione del testo, viene impostato tramite Eval(“Descrizione”) che è il nome della colonna della fonte dati a cui sarà associato il controllo GridView.



Sempre per la templetaField, si noti un altro oggetto di tipo FooterTemplate, in questo modo, possiamo personalizzare il footer con i controlli di proprio gradimento, in questo caso con il controllo linkbutton. Nell'attributo onClick dell'oggetto linkbutton, viene impostato la funzione evento di tale controllo, in questo modo quando viene fatto click su tale controllo sarà eseguito la funzione a cui fa riferimento



La colonna successiva, è di tipo boundfield.






Stesura di codice.



Terminata la progettazione della nostra pagina web, ora non ci resta che scrivere il codice per esportare la griglia in formato Microsoft Excel.



Nel load della Form, inseriamo il seguente codice, per il caricamento della griglia.





VB.Net



Dim dttDati As New DataTable

Dim dtcDescrizione As New DataColumn("Descrizione")

Dim dtcImporto As New DataColumn("Importo")

dttDati.Columns.Add(dtcDescrizione)

dttDati.Columns.Add(dtcImporto)

Dim dtrRiga As DataRow = dttDati.NewRow()



dtrRiga("Descrizione") = "Hard Disk"

dtrRiga("Importo") = 100.3

dttDati.Rows.Add(dtrRiga)

dtrRiga = dttDati.NewRow()

dtrRiga("Descrizione") = "Mouse"

dtrRiga("Importo") = 10.4

dttDati.Rows.Add(dtrRiga)

dtrRiga = dttDati.NewRow()

dtrRiga("Descrizione") = "Crediti precedenti"

dtrRiga("Importo") = -5.2

dttDati.Rows.Add(dtrRiga)

GridView1.DataSource = dttDati

GridView1.DataBind()







C#

DataTable dttDati = new DataTable();

DataColumn dtcDescrizione = new DataColumn("Descrizione");

DataColumn dtcImporto = new DataColumn("Importo");

dttDati.Columns.Add(dtcDescrizione);

dttDati.Columns.Add(dtcImporto);

DataRow dtrRiga = dttDati.NewRow();



dtrRiga["Descrizione"] = "Hard Disk";

dtrRiga["Importo"] = 100.3;

dttDati.Rows.Add(dtrRiga);

dtrRiga = dttDati.NewRow();

dtrRiga["Descrizione"] = "Mouse";

dtrRiga["Importo"] = 10.4;

dttDati.Rows.Add(dtrRiga);

dtrRiga = dttDati.NewRow();

dtrRiga["Descrizione"] = "Crediti precedenti";

dtrRiga["Importo"] = -5.2;

dttDati.Rows.Add(dtrRiga);

GridView1.DataSource = dttDati;

GridView1.DataBind();



Ora non ci resta che creare la funzione che viene avvita al click del controllo linkbutton, il codice riportato qui di seguito, tramite gli oggetti stringWriter e htmlTextWriter, trasforma il contenuto html in uno streaming formato Microsoft Excel, dopo aver impostato il tipo di contenuto ed il nome del file.



VB.Net





Protected Sub LnkEsportaExcel_Click(ByVal sender As Object, ByVal e As EventArgs)

Response.Clear()

Response.Buffer = True

Response.ContentType = "application/ms-excel"

Response.AddHeader("content-disposition", "attachment;filename=NomeFile.xls")

Response.Charset = ""

Dim swr As New System.IO.StringWriter()

Dim htw As New System.Web.UI.HtmlTextWriter(swr)

GridView1.RenderControl(htw)

Response.Write(swr.ToString())

Response.End()

End Sub

C#

protected void LnkEsportaExcel_Click(Object sender, EventArgs e)

{

Response.Clear();



Response.Buffer = true;



Response.ContentType = "application/ms-excel";

Response.AddHeader("content-disposition", "attachment;filename=NomeFile.xls");

Response.Charset = "";



System.IO.StringWriter swr = new System.IO.StringWriter();

System.Web.UI.HtmlTextWriter htw = new System.Web.UI.HtmlTextWriter(swr);



GridView1.RenderControl(htw);

Response.Write(swr.ToString());

Response.End();

}

Prima di testare la nostra pagina, dobbiamo creare l'ovverrides dell'evento della verifica del rendering, della pagina, per evitare che si possano verificare problemi


VB.Net

Public Overrides Sub VerifyRenderingInServerForm(ByVal control As System.Web.UI.Control)



End Sub

C#



public override void VerifyRenderingInServerForm(Control control)

{

}



Non ci resta che eseguire la nostra applicazione, ed effettuare una prova.





Conclusioni:



L'articolo ha voluto illustrare al lettore, la possibilità di ampliare il controllo gridview, con l'aggiunta di un oggetto di tipo linkbutton, per l'esportazione della griglia in formato Microsoft Excel.



La funzionalità di esporta griglia, può tornare utile in diversi contesti.



Tramite la parola download è possibile scaricare il file d'esempio utilizzato in questo articolo.






Download

Nessun commento: