Refer the link merging-gridview-with-multiple-headers
Add the ImageButton in the aspx page.
<asp:ImageButton ToolTip="Csv" ID="btnCsvDown" runat="server" ImageUrl="~/Images/csv.jpg" OnClick="ibtnDownload_Click" CommandName="Csv"/>
<asp:ImageButton ToolTip="Word" ID="btnWordDown" runat="server" ImageUrl="~/Images/word-icon.png" OnClick="ibtnDownload_Click" CommandName="Word" />
<asp:ImageButton ToolTip="Excel" ID="btnExcelDown" runat="server" ImageUrl="~/Images/excel-icon.png" OnClick="ibtnDownload_Click" CommandName="Excel"/>
<asp:ImageButton ToolTip="Pdf" ID="btnPdfDown" runat="server" ImageUrl="~/Images/pdf-icon.png" OnClick="ibtnDownload_Click" CommandName="Pdf"/>
Click events for all the download Image buttons.
protected void ibtnDownload_Click(object sender, ImageClickEventArgs e) { ImageButton imgButton = sender as ImageButton; GridViewExportUtil.Export("Report.xls", this.gvStylish, HeaderRow, DateTime.Now.AddDays(-20).ToShortDateString(), DateTime.Now.ToShortDateString(), imgButton.CommandName.ToUpper()); }The below source code is developed by Mattberseth.
I have updated this, when we are exporting a gridview with multiple headers. mattberseth
using System; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.IO; public class GridViewMultipleHeadersExportUtil { public static void Export(string fileName, GridView gv) { HttpContext.Current.Response.Clear(); HttpContext.Current.Response.AddHeader("content-disposition", string.Format("attachment; filename={0}", fileName)); HttpContext.Current.Response.AddHeader("Content-Transfer-Encoding", "utf-8"); HttpContext.Current.Response.ContentType = "application/vnd.ms-excel"; HttpContext.Current.Response.AddHeader("oCodepage", "65001"); HttpContext.Current.Response.Charset = "utf-8"; HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.GetEncoding("windows-1253"); using (StringWriter sw = new StringWriter()) { using (HtmlTextWriter htw = new HtmlTextWriter(sw)) { // Create a table to contain the grid Table table = new Table(); // include the gridline settings table.GridLines = gv.GridLines; table.Rows.Add(CreateTableRow("Report Generated on: " + DateTime.Now.ToString("MM/dd/yyyy"), 5)); // add the header row to the table if (gv.HeaderRow != null) { GridViewMultipleHeadersExportUtil.PrepareControlForExport(gv.HeaderRow); foreach(TableCell tcHeader in gv.HeaderRow.Cells ) tcHeader.BackColor = System.Drawing.Color.LightGray; //gv.HeaderRow.BackColor = System.Drawing.Color.LightGray; table.Rows.Add(gv.HeaderRow); } // add each of the data rows to the table foreach (GridViewRow row in gv.Rows) { //Set the default color System.Drawing.Color color = row.BackColor; if (color != System.Drawing.Color.White) { row.BackColor = System.Drawing.Color.White; foreach (TableCell tcRow in row.Cells) tcRow.BackColor = color; } GridViewMultipleHeadersExportUtil.PrepareControlForExport(row); table.Rows.Add(row); } // add the footer row to the table // if (gv.FooterRow != null) // { // GridViewMultipleHeadersExportUtil.PrepareControlForExport(gv.FooterRow); // table.Rows.Add(gv.FooterRow); // } // render the table into the htmlwriter table.RenderControl(htw); //render the htmlwriter into the response String s = sw.ToString(); HttpContext.Current.Response.Write(s); HttpContext.Current.Response.End(); } } } public static void Export(string fileName, GridView gv, GridViewRow HeaderRow, string fdate, string tdate, string strExportType) { HttpContext.Current.Response.Clear(); HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.NoCache); switch (strExportType) { case "WORD": HttpContext.Current.Response.ContentType = "application/ms-word"; fileName = fileName.Replace(Path.GetExtension(fileName), ".doc"); break; case "EXCEL": HttpContext.Current.Response.ContentType = "application/ms-excel"; fileName = fileName.Replace(Path.GetExtension(fileName), ".xls"); break; case "PDF": HttpContext.Current.Response.ContentType = "application/pdf"; fileName = fileName.Replace(Path.GetExtension(fileName), ".pdf"); break; case "CSV": HttpContext.Current.Response.ContentType = "application/text"; fileName = fileName.Replace(Path.GetExtension(fileName), ".csv"); break; } HttpContext.Current.Response.AddHeader( "content-disposition", string.Format("attachment; filename={0}", fileName)); using (StringWriter sw = new StringWriter()) { using (HtmlTextWriter htw = new HtmlTextWriter(sw)) { // Create a table to contain the grid Table table = new Table(); // include the gridline settings table.GridLines = gv.GridLines; table.Rows.Add(CreateTableRow("Report from " + fdate + " to " + tdate, 5)); table.Rows.Add(CreateTableRow("Report Generated on: " + DateTime.Now.ToString("MM/dd/yyyy"), 5)); // add the new header row to the table if (HeaderRow != null) { PrepareControlForExport(HeaderRow); //This set entire excel row as LightGray //HeaderRow.BackColor = System.Drawing.Color.LightGray; //This set only columns we are exporting foreach (TableCell tcHeader in HeaderRow.Cells) tcHeader.BackColor = System.Drawing.Color.LightGray; table.Rows.Add(HeaderRow); } // add the header row to the table if (gv.HeaderRow != null) { //Since we are merging the header cell. We have to remove the cell which are not needed /**/ GridViewRow gridViewHeader = gv.HeaderRow; for (int removeCell = 2; removeCell >= 0; removeCell--) gridViewHeader.Cells.RemoveAt(removeCell); //This set only columns we are exporting foreach (TableCell tcHeader in gridViewHeader.Cells) tcHeader.BackColor = System.Drawing.Color.LightGray; //gridViewHeader.BackColor = System.Drawing.Color.LightGray; /**/ //GridViGridViewMultipleHeadersExportUtilewExportUtil.PrepareControlForExport(gv.HeaderRow); //table.Rows.Add(gv.HeaderRow); GridViewMultipleHeadersExportUtil.PrepareControlForExport(gridViewHeader); table.Rows.Add(gridViewHeader); } // add each of the data rows to the table foreach (GridViewRow row in gv.Rows) { GridViewMultipleHeadersExportUtil.PrepareControlForExport(row); /**/ //Set the default color System.Drawing.Color color = row.BackColor; //Set the entire excel row as white if (color != System.Drawing.Color.White) row.BackColor = System.Drawing.Color.White; if (row.Cells[0].Text.ToUpper().Contains("TOTAL") || row.Cells[0].Text.ToUpper().Contains("GRAND")) { color = System.Drawing.Color.LightGray; row.Font.Bold = true; } //Set the color only for the Total and Grand rows if (color != System.Drawing.Color.White) foreach (TableCell tcRow in row.Cells) tcRow.BackColor = color; /**/ table.Rows.Add(row); } // add the footer row to the table if (gv.FooterRow != null) { GridViewMultipleHeadersExportUtil.PrepareControlForExport(gv.FooterRow); table.Rows.Add(gv.FooterRow); } // render the table into the htmlwriter table.RenderControl(htw); // render the htmlwriter into the response HttpContext.Current.Response.Write(sw.ToString()); HttpContext.Current.Response.End(); } } } /* private static void ExportToPdf() { // Create instance of a new document Document doc = new Document(PageSize.A4, 10, 10, 50, 50); // Change the content type to application/pdf !Important HttpContext.Current.Response.ContentType = "application/pdf"; // Get Instance of pdfWriter to be able to create // the document in the OutputStream PdfWriter.GetInstance(doc, HttpContext.Current.Response.OutputStream); // Create Style Sheet StyleSheet styles = new iTextSharp.text.html.simpleparser.StyleSheet(); //--styles.LoadTagStyle("ol", "leading", "16,0"); doc.Add(new Header(iTextSharp.text.html.Markup.HTML_ATTR_STYLESHEET, "Style.css")); // Open the document to be able to write to it doc.Open(); //--styles.LoadTagStyle("li", "face", "garamond"); //--styles.LoadTagStyle("span", "size", "8px"); //--styles.LoadTagStyle("body", "font-family", "times new roman"); //--styles.LoadTagStyle("body", "font-size", "10px"); // Parse html to PDF understandable objects var objects = iTextSharp.text.html.simpleparser.HTMLWorker.ParseToList(new StreamReader(Server.MapPath("Order.aspx"), Encoding.Default), styles); for (int k = 0; k < objects.Count; k++) { doc.Add((IElement)objects[k]); } // Close the document, rendering it to the browser doc.Close(); } */ /// Replace any of the contained controls with literals private static void PrepareControlForExport(Control control) { for (int i = 0; i < control.Controls.Count; i++) { //ctl.GetType().FullName == "System.Web.UI.WebControls.DataControlLinkButton") Control current = control.Controls[i]; switch (current.GetType().Name) { case "LinkButton": //ReplaceControl(control, i, (current as LinkButton).Text); control.Controls.Remove(current); control.Controls.AddAt(i, new LiteralControl((current as LinkButton).Text)); break; case "ImageButton": //ReplaceControl(control, i, (current as ImageButton).AlternateText); control.Controls.Remove(current); control.Controls.AddAt(i, new LiteralControl((current as ImageButton).AlternateText)); break; case "HyperLink": //ReplaceControl(control, i, (current as HyperLink).Text); control.Controls.Remove(current); control.Controls.AddAt(i, new LiteralControl((current as HyperLink).Text)); break; case "DropDownList": //ReplaceControl(control, i, (current as DropDownList).SelectedItem.Text); control.Controls.Remove(current); control.Controls.AddAt(i, new LiteralControl((current as DropDownList).SelectedItem.Text)); break; case "CheckBox": //ReplaceControl(control, i, (current as CheckBox).Checked ? "True" : "False"); control.Controls.Remove(current); control.Controls.AddAt(i, new LiteralControl((current as CheckBox).Checked ? "True" : "False")); break; } if (current.HasControls()) { GridViewMultipleHeadersExportUtil.PrepareControlForExport(current); } } } //private static void ReplaceControl(Control control, int i, string text) //{ // control.Controls.Remove(text); // control.Controls.AddAt(i, new LiteralControl(text)); //} public static TableRow CreateTableRow(string text, int iColSpan) { TableRow objTableRow = new TableRow(); TableCell tc = new TableCell(); tc.Text = text; tc.HorizontalAlign = HorizontalAlign.Left; tc.Font.Bold = true; tc.ColumnSpan = iColSpan; objTableRow.Cells.Add(tc); return objTableRow; } }Export GridView with Images to Word Excel and PDF Formats in ASP.Net Soure Code References