Introduction
This article describes how to export a
GridView data to excel, word, pdf, text, csv format and print in ASP.Net.
Description
Since there is no support for pdf conversion,
we require a third-party DLL to be referenced by our application that will use
for convert the grid to pdf.
- itextsharp.dll
You can download it from the source code
attached to this article.
Design
Now add GridvView, six Button for export.
Design your screen as in the following screen.
Or you can copy the following source code:
<body>
<form
id="form1"
runat="server">
<div>
<table>
<tr>
<td
colspan="3"
align="center">
<asp:GridView
ID="gvDetails"
runat="server"
AutoGenerateColumns="false">
<Columns>
<asp:BoundField
DataField="EmpId"
HeaderText="Employee ID"
/>
<asp:BoundField
DataField="EmpName"
HeaderText="Employee
Name" />
<asp:BoundField
DataField="Education"
HeaderText="Education"
/>
<asp:BoundField
DataField="Place"
HeaderText="Place"
/>
</Columns>
</asp:GridView>
</td>
</tr>
<tr>
<td>
<asp:Button
ID="btnExel"
runat="server"
Text="Export to Exel"
OnClick="btnExel_Click" />
</td>
<td>
<asp:Button
ID="btnWord"
runat="server"
Text="Export to Word"
OnClick="btnWord_Click" />
</td>
<td>
<asp:Button
ID="btnPdf"
runat="server"
Text="Export to Pdf"
OnClick="btnPdf_Click"
/>
</td>
</tr>
<tr>
<td>
<asp:Button
ID="btnCsv"
runat="server"
Text="Export to Csv"
OnClick="btnCsv_Click"
/>
</td>
<td>
<asp:Button
ID="btnText"
runat="server"
Text="Export to Text"
OnClick="btnText_Click" />
</td>
<td>
<asp:Button
ID="btnPrint"
runat="server"
Text="Print"
OnClientClick="PrintGridData();"
/>
</td>
</tr>
</table>
</div>
</form>
</body>
</html>
Now go to the code view.
Here I use a static datatable data to bind it
to grid. but you can use database data to bind.
Import the reference of
using System.Data;
following is the code to bind data to grid method and call this method in :
protected
void Page_Load(object
sender, EventArgs e)
{
if (!IsPostBack)
{
BindGridDetails();
}
}
protected void
BindGridDetails()
{
DataTable dt =
new DataTable();
dt.Columns.Add("EmpId",
typeof(Int32));
dt.Columns.Add("EmpName",
typeof(string));
dt.Columns.Add("Education",
typeof(string));
dt.Columns.Add("Place",
typeof(string));
DataRow dtrow = dt.NewRow();
dtrow["EmpId"] = 1;
dtrow["EmpName"] =
"Sanjeeb";
dtrow["Education"] =
"MCA";
dtrow["Place"] =
"Hyderabad";
dt.Rows.Add(dtrow);
dtrow = dt.NewRow();
dtrow["EmpId"] = 2;
dtrow["EmpName"] =
"Laku";
dtrow["Education"] =
"MBA";
dtrow["Place"] =
"Hyderabad";
dt.Rows.Add(dtrow);
dtrow = dt.NewRow();
dtrow["EmpId"] = 3;
dtrow["EmpName"] =
"Pankaj";
dtrow["Education"] =
"B.Tech";
dtrow["Place"] =
"Bihar";
dt.Rows.Add(dtrow);
dtrow = dt.NewRow();
dtrow["EmpId"] = 4;
dtrow["EmpName"] =
"Srikanth";
dtrow["Education"] =
"B.Tech";
dtrow["Place"] =
"Hyderabad";
dt.Rows.Add(dtrow);
gvDetails.DataSource = dt;
gvDetails.DataBind();
}
Now run the application you will see the gridview with data.
GridView with data is ready for export.
Import the reference of
using System.IO;
Now write this code under button click event
of Exel.
//This code
is for export grid to exel
protected void
btnExel_Click(object sender,
EventArgs e)
{
BindGridDetails();
Response.ClearContent();
Response.Buffer = true;
Response.AddHeader("content-disposition",
string.Format("attachment;
filename={0}", "Details.xls"));
Response.ContentType =
"application/ms-excel";
StringWriter sw =
new StringWriter();
HtmlTextWriter ht =
new HtmlTextWriter(sw);
gvDetails.RenderControl(ht);
Response.Write(sw.ToString());
Response.End();
}
write this code under button click event of Word:
//This
code is for export grid to word
protected void
btnWord_Click(object sender,
EventArgs e)
{
BindGridDetails();
Response.ClearContent();
Response.Buffer = true;
Response.AddHeader("content-disposition",
string.Format("attachment;
filename={0}", "Details.doc"));
Response.ContentType = "application/ms-word";
StringWriter sw =
new StringWriter();
HtmlTextWriter ht =
new HtmlTextWriter(sw);
gvDetails.RenderControl(ht);
Response.Write(sw.ToString());
Response.End();
}
Import the reference of
using System.Text;
write this code under button click event of Text:
//This
code is for export grid to text
protected void
btnText_Click(object sender,
EventArgs e)
{
BindGridDetails();
Response.ClearContent();
Response.AddHeader("content-disposition",
string.Format("attachment;
filename={0}", "Details.txt"));
Response.ContentType = "application/text";
StringBuilder str =
new StringBuilder();
for (int
i = 0; i < gvDetails.Columns.Count; i++)
{
str.Append(gvDetails.Columns[i].HeaderText +
',');
}
str.Append("\n");
for (int
j = 0; j < gvDetails.Rows.Count; j++)
{
for (int
k = 0; k < gvDetails.Columns.Count; k++)
{
str.Append(gvDetails.Rows[j].Cells[k].Text +
',');
}
str.Append("\n");
}
Response.Write(str.ToString());
Response.End();
}
write this code under button click event of
Csv:
//This
code is for export grid to text
protected void
btnText_Click(object sender,
EventArgs e)
{
BindGridDetails();
Response.ClearContent();
Response.AddHeader("content-disposition",
string.Format("attachment;
filename={0}", "Details.txt"));
Response.ContentType = "application/text";
StringBuilder str =
new StringBuilder();
for (int
i = 0; i < gvDetails.Columns.Count; i++)
{
str.Append(gvDetails.Columns[i].HeaderText +
',');
}
str.Append("\n");
for (int
j = 0; j < gvDetails.Rows.Count; j++)
{
for (int
k = 0; k < gvDetails.Columns.Count; k++)
{
str.Append(gvDetails.Rows[j].Cells[k].Text +
',');
}
str.Append("\n");
}
Response.Write(str.ToString());
Response.End();
}
Before write the code for pdf 1st add the reference of itextsharp.dll.
Import these namspaces.
using
iTextSharp;
using
iTextSharp.text;
using
iTextSharp.text.html.simpleparser;
using
iTextSharp.text.pdf;
write this code under button click event of Pdf:
//This
code is for export grid to pdf
protected void
btnPdf_Click(object sender,
EventArgs e)
{
BindGridDetails();
Response.ContentType = "application/pdf";
Response.AddHeader("content-disposition",
"attachment;filename=Details.pdf");
Response.Cache.SetCacheability(HttpCacheability.NoCache);
StringWriter sw =
new StringWriter();
HtmlTextWriter hw =
new HtmlTextWriter(sw);
gvDetails.RenderControl(hw);
StringReader sr =
new StringReader(sw.ToString());
Document pdfDoc =
new Document(PageSize.A4,
10f, 10f, 10f, 0f);
HTMLWorker htmlparser =
new HTMLWorker(pdfDoc);
PdfWriter.GetInstance(pdfDoc,
Response.OutputStream);
pdfDoc.Open();
htmlparser.Parse(sr);
pdfDoc.Close();
Response.Write(pdfDoc);
Response.End();
}
For print button write this javascript code in head section of aspx page.
<script
type="text/javascript">
function PrintGridData() {
var prtGrid =
document.getElementById('<%=gvDetails.ClientID
%>');
var prtwin = window.open('',
'PrintGridView',
'left=100,top=100,width=400,height=400,tollbar=0,scrollbars=1,status=0,resizable=1');
prtwin.document.write(prtGrid.outerHTML);
prtwin.document.close();
prtwin.focus();
prtwin.print();
prtwin.close();
}
</script>
Call this function in print button OnClientClick.
<asp:Button
ID="btnPrint"
runat="server"
Text="Print"
OnClientClick="PrintGridData();"
/>
Now if you run the application you will got an error like this
To avoid this error write this code :
//Verifies
the control is rendered
public override
void VerifyRenderingInServerForm(Control
control)
{
}
Now run the application and check the app by clicking on export Buttons.