In my previous tutorials, I’d explained export only gridview selected row data to word excel text pdf, insert update delete using gridview, print gridview data on print button click and other more cracking tutorials on GridView, Asp.net here.
Now here in this tutorial, I’ll explain how to export gridview data with gridview’s exact CSS style and format to word, excel, pdf (using itextsharp.dll) and text file in asp.net using c# as well as vb.net with example code.
To explain further about how to export gridview data in asp.net, we need to create database table to read data and bind retrieved resultset to gridview, so simply execute following script to sql query editor to create database table and then add few records manually or download complete example code with script at the end of the page.
Here is the script to create “œSubjectDetails” table:
(
[SubjectId] [int] IDENTITY(1,1) NOT NULL PRIMARY KEY,
[SubjectName] [nvarchar](100) NULL,
[Marks] [int] NULL,
[Grade] [nvarchar](50) NULL
)
I guess you all know about how to bind gridview. So I’m skipping that point and come to the subject to export gridview data to word, excel, csv, pdf and text file. Following is the HTML Markup that contains asp.net buttons and gridview, simply copy and paste to your .aspx page:
Export GridView Data In Asp.net – [.aspx]
<head id=”Head1″ runat=”server”>
<title>Export GridView Data to Word, Excel, CSV, Pdf, Text File In Asp.net</title>
</head>
<body>
<form id=”form1″ runat=”server”>
<div>
<table>
<tr>
<td colspan=”3″>
<h4>Export Grid Data to Word, Excel, CSV, Pdf File Examples</h4>
</td>
</tr>
<tr>
<td colspan=”3″>
<asp:Button ID=”btnExportToWord” runat=”server” Text=”ExportToWord”
OnClick=”btnExportToWord_Click” />
<asp:Button ID=”btnExportToExcel” runat=”server” Text=”ExportToExcel”
OnClick=”btnExportToExcel_Click” />
<asp:Button ID=”btnExportToCSV” runat=”server” Text=”ExportToCSV”
OnClick=”btnExportToCSV_Click” />
<asp:Button ID=”btnExportToText” runat=”server” Text=”ExportToText”
OnClick=”btnExportToText_Click” />
<asp:Button ID=”btnExportToPdf” runat=”server” Text=”ExportToPdf”
OnClick=”btnExportToPdf_Click” />
</td>
</tr>
<tr>
<td colspan=”3″>
<asp:GridView ID=”grdResultDetails” runat=”server” AutoGenerateColumns=”false”
PageSize=”5″ AllowPaging=”true”
OnPageIndexChanging=”grdResultDetails_PageIndexChanging”>
<HeaderStyle BackColor=”#9a9a9a” ForeColor=”White” Font-Bold=”true” Height=”30″ />
<PagerStyle HorizontalAlign=”Center” />
<AlternatingRowStyle BackColor=”#f5f5f5″ />
<Columns>
<asp:BoundField DataField=”SubjectName” HeaderText=”SubjectName”
ItemStyle-HorizontalAlign=”Center” ItemStyle-Width=”200″ />
<asp:BoundField DataField=”Marks” HeaderText=”Marks”
ItemStyle-HorizontalAlign=”Center” ItemStyle-Width=”200″ />
<asp:BoundField DataField=”Grade” HeaderText=”Grade”
ItemStyle-HorizontalAlign=”Center” ItemStyle-Width=”200″ />
</Columns>
</asp:GridView>
</td>
</tr>
</table>
</div>
</form>
</body>
</html>
After copying HTML Markup, now it’s time to add required .dll and namespace references to code-behind file. To add reference to your project Right Click on References > Add New Reference > Browse to itextsharp.dll > OK.
After adding the reference, choose a required language (C# or Vb.net), and then copy paste the following code to your code-behind file.
Export GridView Data To Word, Excel, Csv, Text, Pdf In C#
First add the following namespaces to your .cs page:
using System.IO;
using System.Text;
using iTextSharp;
using iTextSharp.text;
using iTextSharp.text.html.simpleparser;
using iTextSharp.text.pdf;
using System.Data.SqlClient;
Then add the following code snippet to your code-behind file which helps you to export gridview data:
private void ExportFile(string fileName, string contentType)
{
//disable paging to export all data and make sure to bind griddata before begin
grdResultDetails.AllowPaging = false;
LoadGridData();
Response.ClearContent();
Response.Buffer = true;
Response.AddHeader(“content-disposition”, string.Format(“attachment; filename={0}”, fileName));
Response.ContentType = contentType;
StringWriter objSW = new StringWriter();
HtmlTextWriter objTW = new HtmlTextWriter(objSW);
grdResultDetails.RenderControl(objTW);
Response.Write(objSW);
Response.End();
}
//2nd Method: To Export to CSV, Text file
private void ExportTextBasedFile(string fileName, string contentType)
{
//disable paging to export all data and make sure to bind griddata before begin
grdResultDetails.AllowPaging = false;
LoadGridData();
Response.ClearContent();
Response.AddHeader(“content-disposition”, string.Format(“attachment; filename={0}”, fileName));
Response.ContentType = contentType;
StringBuilder objSB = new StringBuilder();
for (int i = 0; i < grdResultDetails.Columns.Count; i++)
{
objSB.Append(grdResultDetails.Columns[i].HeaderText + ‘,’);
}
objSB.Append(“\n”);
for (int j = 0; j < grdResultDetails.Rows.Count; j++)
{
for (int k = 0; k < grdResultDetails.Columns.Count; k++)
{
objSB.Append(grdResultDetails.Rows[j].Cells[k].Text + ‘,’);
}
objSB.Append(“\n”);
}
Response.Write(objSB.ToString());
Response.End();
}
And call them on specific button click event as follows:
protected void btnExportToWord_Click(object sender, EventArgs e)
{
string fileName = “ExportToWord_” + DateTime.Now.ToShortDateString() + “.doc”,
contentType = “application/ms-word”;
//call 1st export method with fileName and contentType
ExportFile(fileName, contentType);
}
//Method for Export to Excel
protected void btnExportToExcel_Click(object sender, EventArgs e)
{
string fileName = “ExportToExcel_” + DateTime.Now.ToShortDateString() + “.xls”,
contentType = “application/vnd.ms-excel”;
//call 1st export method with fileName and contentType
ExportFile(fileName, contentType);
}
/* Method for Export to CSV
* Note: CSV file is a text representation so we can’t style .csv document*/
protected void btnExportToCSV_Click(object sender, EventArgs e)
{
string fileName = “ExportToCSV_” + DateTime.Now.ToShortDateString() + “.csv”,
contentType = “application/text”;
//call 2nd export method with fileName and contentType
ExportTextBasedFile(fileName, contentType);
}
/* Method for Export to Text
* Note: TEXT file is a text representation so we can’t style .txt document*/
protected void btnExportToText_Click(object sender, EventArgs e)
{
string fileName = “ExportToText_” + DateTime.Now.ToShortDateString() + “.txt”,
contentType = “application/text”;
//call 2nd export method with fileName and contentType
ExportTextBasedFile(fileName, contentType);
}
Following is the method to export data to pdf file:
protected void btnExportToPdf_Click(object sender, EventArgs e)
{
//disable paging to export all data and make sure to bind griddata before begin
grdResultDetails.AllowPaging = false;
LoadGridData();
string fileName = “ExportToPdf_” + DateTime.Now.ToShortDateString();
Response.ContentType = “application/pdf”;
Response.AddHeader(“content-disposition”, string.Format(“attachment; filename={0}”,
fileName + “.pdf”));
Response.Cache.SetCacheability(HttpCacheability.NoCache);
StringWriter objSW = new StringWriter();
HtmlTextWriter objTW = new HtmlTextWriter(objSW);
grdResultDetails.RenderControl(objTW);
StringReader objSR = new StringReader(objSW.ToString());
Document objPDF = new Document(PageSize.A4, 100f, 100f, 100f, 100f);
HTMLWorker objHW = new HTMLWorker(objPDF);
PdfWriter.GetInstance(objPDF, Response.OutputStream);
objPDF.Open();
objHW.Parse(objSR);
objPDF.Close();
Response.Write(objPDF);
Response.End();
}
Export GridView Data To Word, Excel, Csv, Text, Pdf In Vb.net
First add the following namespaces to your .vb page:
Imports iTextSharp.text
Imports iTextSharp.text.html.simpleparser
Imports iTextSharp.text.pdf
Imports System.Data.SqlClient
Then add the following code snippet to your code-behind file which helps you to export gridview data:
Private Sub ExportFile(ByVal fileName As String, ByVal contentType As String)
‘disable paging to export all data and make sure to bind griddata before begin
grdResultDetails.AllowPaging = False
LoadGridData()
Response.ClearContent()
Response.Buffer = True
Response.AddHeader(“content-disposition”, String.Format(“attachment; filename={0}”, fileName))
Response.ContentType = contentType
Dim objSW As New StringWriter()
Dim objTW As New HtmlTextWriter(objSW)
grdResultDetails.RenderControl(objTW)
Response.Write(objSW)
Response.End()
End Sub
‘2nd Method: To Export to CSV, Text file
Private Sub ExportTextBasedFile(ByVal fileName As String, ByVal contentType As String)
‘disable paging to export all data and make sure to bind griddata before begin
grdResultDetails.AllowPaging = False
LoadGridData()
Response.ClearContent()
Response.AddHeader(“content-disposition”, String.Format(“attachment; filename={0}”, fileName))
Response.ContentType = contentType
Dim objSB As New StringBuilder()
For i As Integer = 0 To grdResultDetails.Columns.Count – 1
objSB.Append(grdResultDetails.Columns(i).HeaderText & AscW(“,”c))
Next i
objSB.Append(ControlChars.Lf)
For j As Integer = 0 To grdResultDetails.Rows.Count – 1
For k As Integer = 0 To grdResultDetails.Columns.Count – 1
objSB.Append(grdResultDetails.Rows(j).Cells(k).Text & “,”c)
Next k
objSB.Append(ControlChars.Lf)
Next j
Response.Write(objSB.ToString())
Response.End()
End Sub
And call them on specific button click event as follows:
Protected Sub btnExportToWord_Click(ByVal sender As Object, ByVal e As EventArgs)
Dim fileName As String = “ExportToWord_” & Date.Now.ToShortDateString() & “.doc”,
contentType As String = “application/ms-word”
‘call 1st export method with fileName and contentType
ExportFile(fileName, contentType)
End Sub
‘Method for Export to Excel
Protected Sub btnExportToExcel_Click(ByVal sender As Object, ByVal e As EventArgs)
Dim fileName As String = “ExportToExcel_” & Date.Now.ToShortDateString() & “.xls”,
contentType As String = “application/vnd.ms-excel”
‘call 1st export method with fileName and contentType
ExportFile(fileName, contentType)
End Sub
‘Method for Export to CSV
‘Note: CSV file is a text representation so we can’t style .csv document
Protected Sub btnExportToCSV_Click(ByVal sender As Object, ByVal e As EventArgs)
Dim fileName As String = “ExportToCSV_” & Date.Now.ToShortDateString() & “.csv”,
contentType As String = “application/text”
‘call 2nd export method with fileName and contentType
ExportTextBasedFile(fileName, contentType)
End Sub
‘Method for Export to Text
‘Note: TEXT file is a text representation so we can’t style .txt document
Protected Sub btnExportToText_Click(ByVal sender As Object, ByVal e As EventArgs)
Dim fileName As String = “ExportToText_” & Date.Now.ToShortDateString() & “.txt”,
contentType As String = “application/text”
‘call 2nd export method with fileName and contentType
ExportTextBasedFile(fileName, contentType)
End Sub
Following is the method to export data to pdf file:
Protected Sub btnExportToPdf_Click(ByVal sender As Object, ByVal e As EventArgs)
‘disable paging to export all data and make sure to bind griddata before begin
grdResultDetails.AllowPaging = False
LoadGridData()
Dim fileName As String = “ExportToPdf_” & Date.Now.ToShortDateString()
Response.ContentType = “application/pdf”
Response.AddHeader(“content-disposition”, String.Format(“attachment; filename={0}”,
fileName & “.pdf”))
Response.Cache.SetCacheability(HttpCacheability.NoCache)
Dim objSW As New StringWriter()
Dim objTW As New HtmlTextWriter(objSW)
grdResultDetails.RenderControl(objTW)
Dim objSR As New StringReader(objSW.ToString())
Dim objPDF As New Document(PageSize.A4, 100.0F, 100.0F, 100.0F, 100.0F)
Dim objHW As New HTMLWorker(objPDF)
PdfWriter.GetInstance(objPDF, Response.OutputStream)
objPDF.Open()
objHW.Parse(objSR)
objPDF.Close()
Response.Write(objPDF)
Response.End()
End Sub
During Development, I Faced Following Errors:
Control ‘grdResultDetails’ of type ‘GridView’ must be placed inside a form tag with runat=server
Control ‘grdResultDetails’ of type ‘GridView’ must be placed inside a form tag with
runat=server.
Description: An unhandled exception occurred during the execution of the current web request.
Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.Web.HttpException: Control ‘grdResultDetails’ of type ‘GridView’
must be placed inside a form tag with runat=server.
To resolve this issue, please check how to solve control ‘grdResultDetails’ of type ‘GridView’ must be placed inside a form tag with runat=server.
RegisterForEventValidation can only be called during Render();
RegisterForEventValidation can only be called during Render();
Description: An unhandled exception occurred during the execution of the current web request.
Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.InvalidOperationException: RegisterForEventValidation can only be
called during Render();
To resolve this issue, please check how to solve RegisterForEventValidation can only be called during Render();.
Your code works perfectly in a AspNet website.
I want to do exactly the same in a windows form i.e. export from a DataGridView (Windows forms have only a DataGridView, not GridView) to Word PDF Excel etc.
Windows forms do not have the Response object so I have not worked out a way to convert your code from ASP.Net to Windows code.
Can it be done?
PaulG
Hi Paul,
Thanks.
No, you can’t convert that way. Unfortunately, I have no idea about windows apps as I’m working on web apps only. Though you can get many tutorials from Google. Good Luck!
Hi,
I’m getting the following error. Please help
Unable to cast object of type ‘iTextSharp.text.html.simpleparser.CellWrapper’ to type ‘iTextSharp.text.Paragraph’.
Are you trying to export html page into pdf or Gridview data? If you are exporting html page or similar, I suggest you to check http://stackoverflow.com/questions/12113425/itextsharp-error-on-trying-to-parse-html-for-pdf-conversion or http://www.codeproject.com/Questions/383958/Exporting-aspx-page-to-pdf which is similar to your problem, I guess. 🙂
No, I’m trying to convert Gridview Data to PDF
OK, then download above example code and run locally. If its working then something wrong in your code. Also make sure you’re using itextsharp.dll that provided in provided example code.
Hi,
I am doing a application that will execute a store procedure and display query result in excel or PDF.
How can i used a web form (Textbox and Button) to execute a store procedure and display database result to excel or PDF.
Best Regards,
Augustine
I’m getting the PDF of the gridview but the text is missing. Its only getting number of columns and rows color . Kindly Help.
I’ve re-check and its working fine. You should check how you bind data and also check the pdf export settings.
Lots of great work here … thanks.
Export to Excel generates “The file format and extension don’t match. The file could be corrupt or unsafe” on opening in Excel. Any way around that?
Thanks
Hi,
Lots of good work here … thanks!
Export to Excel generates “The file format and extension don’t match. The file could be corrupted of unsafe.” on opening with Excel. Any way around that?
Thanks.