Thursday, March 20, 2014

Export GridView to excel in Visual Webpart in SharePoint

Declare GridView and Button as below

<asp:GridView ID="gridViewPermission"  runat="server" >
     </asp:GridView>

<asp:Button ID="buttonExportUsers" runat="server" Text="Export Users" onclick="ButtonExportUsers_Click" OnClientClick="window.setTimeout(function() { _spFormOnSubmitCalled = false; }, 10);"/>

Note the OnClientClick event for button

There are two approaches to export it

1. Export to csv file
2. Export to excel file



1. Export to csv file

            StringBuilder sb = new StringBuilder();
            GridViewRow grHeader = gridViewPermission.HeaderRow;
            int counter = 0;

            foreach (TableCell tc in grHeader.Cells)
            {
                sb.Append("" + tc.Text + " ,");
                counter++;
            }
            sb.AppendLine();

            foreach (GridViewRow gr in gridViewPermission.Rows)
            {
                foreach (TableCell tc in gr.Cells)
                {
                    sb.Append("" + tc.Text + " ,");
                }
                sb.AppendLine();
            }

            Response.Clear();
            Response.ClearHeaders();
            Response.ClearContent();
            Response.AddHeader(" content-disposition", " attachment; filename=" + strSite + "_Users_" + strDate + ".csv");
            Response.ContentType = " text/csv";
         
            Response.AddHeader(" Pragma", " public");
            Response.Write(sb.ToString());
            Response.End();


2. Export to excel file

Response.ClearContent();
            Response.AddHeader("content-disposition", " attachment; filename=" + strSite + "_Users_" + strDate + ".xls");
            Response.ContentType = "application/vnd.ms-excel";
            string tab = string.Empty;
            GridViewRow grHeader = gridViewPermission.HeaderRow;
            foreach (TableCell headerCell in grHeader.Cells)
            {
               Response.Write(tab + headerCell.Text );
               tab = "\t";
            }

            Response.Write("\n");
            foreach (GridViewRow gridViewRow in gridViewPermission.Rows)
            {
                tab = string.Empty;
                foreach (TableCell dataCell in gridViewRow.Cells)
                {
                    Response.Write(tab + dataCell.Text.Replace(CommonFunctions.SpaceText,string.Empty) );
                    tab = "\t";
                }
                Response.Write("\n");
            }
            Response.End();

References - http://www.fewlines4biju.com/2011/11/export-gridview-data-to-excel-aspnet.html