HTML
<asp:GridView ID="GridView1" HeaderStyle-BackColor="#3AC0F2" HeaderStyle-ForeColor="White"
runat="server" AutoGenerateColumns="false" ShowFooter="true" OnDataBound="GridView1_DataBound">
<Columns>
<asp:BoundField DataField="Id" HeaderText="Id" ItemStyle-Width="30" />
<asp:BoundField DataField="Name" HeaderText="Name" ItemStyle-Width="150" />
<asp:TemplateField HeaderText="Salary">
<ItemTemplate>
<asp:Label ID="lblSalary" runat="server" Text='<%# Eval("Salary") %>' />
</ItemTemplate>
<FooterTemplate>
<asp:Label ID="lblTotalSalary" runat="server" />
</FooterTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<asp:Button ID="btnExport" Text="Export" OnClick="ExportExcel" runat="server" />
Code
protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack)
{
DataTable dt = new DataTable();
dt.Columns.AddRange(new DataColumn[3] { new DataColumn("Id", typeof(string)),
new DataColumn("Name", typeof(string)),
new DataColumn("Salary",typeof(int)) });
dt.Rows.Add(1, "John Doe", 20000);
dt.Rows.Add(2, "Suzanne Mathews", 45000);
dt.Rows.Add(3, "Robert Schidner", 50000);
ViewState["DataTable"] = dt;
GridView1.DataSource = dt;
GridView1.DataBind();
}
}
protected void GridView1_DataBound(object sender, EventArgs e)
{
int total = (from row in GridView1.Rows.Cast<GridViewRow>()
select int.Parse((row.FindControl("lblSalary") as Label).Text)).Sum();
(GridView1.FooterRow.FindControl("lblTotalSalary") as Label).Text = "Total: " + total.ToString();
DataTable dt = (DataTable)ViewState["DataTable"];
dt.Rows.Add("", "Total", total);
ViewState["DataTable"] = dt;
}
protected void ExportExcel(object sender, EventArgs e)
{
DataTable dt = new DataTable("GridView_Data");
dt = (DataTable)ViewState["DataTable"];
using (XLWorkbook wb = new XLWorkbook())
{
wb.Worksheets.Add(dt);
Response.Clear();
Response.Buffer = true;
Response.Charset = "";
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Response.AddHeader("content-disposition", "attachment;filename=GridView.xlsx");
using (MemoryStream MyMemoryStream = new MemoryStream())
{
wb.SaveAs(MyMemoryStream);
MyMemoryStream.WriteTo(Response.OutputStream);
Response.Flush();
Response.End();
}
}
}
Screenshot
