Inserire un linkbutton nel footer del controllo GridView

Viene illustrata una tecnica di come aggiungere un pulsante nel footer del controllo gridview ed esportare la griglia in Microsoft EXcel 2007, il tutto tramite Visual Basic Net e C#.

il
Sviluppatore Microsoft .Net, Collaboratore di IProgrammatori

 

Introduzione

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