In this article I am going to explain with example how to Bind GridView and Export Gridview data to Ms Word file usingasp.net.
![]() |
Click on image to enlarge |
![]() |
click on image to enlarge |
Implementation: Let's create an asp.net sample application to understand.
- First of all create a Database e.g. "MyDataBase" and a also create a table under that DataBase in Sql Server and name it "EMPLOYEE" as shown in figure:
- Now in web.config file add the connection string under <configuration> tag :
<add name="conStr" connectionString="Data Source=LocalServer;Initial Catalog=MyDataBase;Integrated Security=True"/>
</connectionStrings> Note: Replace the Data Source and the Initial catalog as per your applicaton.
- In the design page (.aspx) place a GridView control to bind with data and a Button control to Export the GridView data to MS word file.
Source Code:
<fieldset style="width:360px;">
<fieldset style="width:360px;">
<legend>Bind and Export GridView data to Ms Word in asp.net</legend>
<table>
<tr>
<td>
<asp:GridView ID="grEmp" runat="server" AllowPaging="True" AutoGenerateColumns="False"
GridLines="None" Width="100%" CellPadding="4" ForeColor="#333333">
<AlternatingRowStyle BackColor="White" ForeColor="#284775" />
<Columns>
<asp:BoundField DataField="EMP_NAME" HeaderText="Emp Name" />
<asp:BoundField DataField="DEPT" HeaderText="Department" />
<asp:BoundField DataField="SALARY" HeaderText="salary" />
<asp:BoundField DataField="EMAIL_ID" HeaderText="Email Id" />
</Columns>
<EditRowStyle BackColor="#999999" />
<FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
<HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
<PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
<RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
<SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
<SortedAscendingCellStyle BackColor="#E9E7E2" />
<SortedAscendingHeaderStyle BackColor="#506C8C" />
<SortedDescendingCellStyle BackColor="#FFFDF8" />
<SortedDescendingHeaderStyle BackColor="#6F8DAE" />
</asp:GridView>
</td>
</tr>
<tr>
<td>
<asp:Button ID="btnExportToWord" runat="server" Text="Export To MS Word FIle"OnClick="btnExportToWord_Click" />
</td>
</tr>
</table>
</fieldset>
C#.Net Code to Bind and Export GridView data to Ms word file
First include the following namespaces
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using System.Net;
using System.Net.Mail;
using System.Web.UI.HtmlControls;
using System.IO;
using System.Text;
Then write the code as:
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["conStr"].ConnectionString);
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
BindEmpGrid();
}
}
public override void VerifyRenderingInServerForm(Control control)
{
//It solves the error "Control 'GridView1' of type 'GridView' must be placed inside a form tag with runat=server."
}
protected void BindEmpGrid()
{
SqlCommand cmd = new SqlCommand("select * from EMPLOYEE", con);
DataTable dt = new DataTable();
SqlDataAdapter adp = new SqlDataAdapter(cmd);
adp.Fill(dt);
grEmp.DataSource = dt;
grEmp.DataBind();
}
protected void btnExportToWord_Click(object sender, EventArgs e)
{
try
{
Response.ClearContent();
Response.AddHeader("content-disposition", "attachment;filename=MyWordFile.doc");
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Buffer = true;
Response.Charset = "";
Response.ContentType = "application/vnd.word";
StringWriter strWrite = new System.IO.StringWriter();
HtmlTextWriter htmWrite = new HtmlTextWriter(strWrite);
HtmlForm htmfrm = new HtmlForm();
grEmp.Parent.Controls.Add(htmfrm);
grEmp.AllowPaging = false;
htmfrm.Attributes["runat"] = "server";
htmfrm.Controls.Add(grEmp);
htmfrm.RenderControl(htmWrite);
Response.Write(strWrite.ToString());
Response.Flush();
Response.End();
}
catch (Exception ex){}
}
VB.Net Code to Bind and Export GridView data to Ms word file
First import the following namespaces
Imports System.Data
Imports System.Data.SqlClient
Imports System.Configuration
Imports System.Net
Imports System.Net.Mail
Imports System.Web.UI.HtmlControls
Imports System.IO
Imports System.Text
Then write the code as:
Dim con As New SqlConnection(ConfigurationManager.ConnectionStrings("conStr").ConnectionString)
Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
If Not Page.IsPostBack Then
BindEmpGrid()
End If
End Sub
Public Overrides Sub VerifyRenderingInServerForm(control As Control)
'It solves the error "Control 'GridView1' of type 'GridView' must be placed inside a form tag with runat=server."
End Sub
Protected Sub BindEmpGrid()
Dim cmd As New SqlCommand("select * from EMPLOYEE", con)
Dim dt As New DataTable()
Dim adp As New SqlDataAdapter(cmd)
adp.Fill(dt)
grEmp.DataSource = dt
grEmp.DataBind()
End Sub
Protected Sub btnExportToWord_Click(sender As Object, e As EventArgs)
Try
Response.ClearContent()
Response.AddHeader("content-disposition", "attachment;filename=MyWordFile.doc")
Response.Cache.SetCacheability(HttpCacheability.NoCache)
Response.Buffer = True
Response.Charset = ""
Response.ContentType = "application/vnd.word"
Dim strWrite As StringWriter = New System.IO.StringWriter()
Dim htmWrite As New HtmlTextWriter(strWrite)
Dim htmfrm As New HtmlForm()
grEmp.Parent.Controls.Add(htmfrm)
grEmp.AllowPaging = False
htmfrm.Attributes("runat") = "server"
htmfrm.Controls.Add(grEmp)
htmfrm.RenderControl(htmWrite)
Response.Write(strWrite.ToString())
Response.Flush()
Response.[End]()
Catch ex As Exception
End Try
End Sub
- Notice that I have added an overriding function VerifyRenderingInServerForm in the code behind. This is to resolve the error “Control 'GridView1' of type 'GridView' must be placed inside a form tag with runat=server” that may occur on exporting GridView data to MS Excel file or MS Word or PDF or CSV (Comma separated value) file.
0 comments:
Post a Comment
Note: only a member of this blog may post a comment.