Hi democloud
Please refer below smaple.
HTML
<asp:GridView runat="server" ID="GridView1" AutoGenerateColumns="false">
<Columns>
<asp:BoundField DataField="OrderID" HeaderText="OrderID" />
<asp:BoundField DataField="OrderDate" HeaderText="OrderDate" />
<asp:BoundField DataField="ShipCountry" HeaderText="ShipCountry" />
</Columns>
</asp:GridView>
<asp:Button ID="Button1" Text="Export" runat="server" OnClick="btnToCSV_Click" />
Namespaces
C#
using System.Data.SqlClient;
using System.Configuration;
using System.Data;
using System.Text;
VB.Net
Imports System.Data.SqlClient
Imports System.IO
Imports System.Drawing
Imports System.Data
Code
C#
protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack)
{
string constr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
using (SqlConnection con = new SqlConnection(constr))
{
using (SqlCommand cmd = new SqlCommand("SELECT TOP 5 OrderID, OrderDate, ShipCountry FROM Orders", con))
{
using (SqlDataAdapter da = new SqlDataAdapter(cmd))
{
DataTable dt = new DataTable();
da.Fill(dt);
GridView1.DataSource = dt;
GridView1.DataBind();
ViewState["Data"] = dt;
}
}
}
}
}
protected void btnToCSV_Click(object sender, EventArgs e)
{
Response.Clear();
Response.Buffer = true;
Response.AddHeader("content-disposition", "attachment;filename=GridViewExport.csv");
Response.Charset = "";
Response.ContentType = "application/text";
DataTable dt = ViewState["Data"] as DataTable;
DataTable dt2 = new DataTable();
for (int i = 0; i < dt.Columns.Count; i++)
{
dt2.Columns.Add(dt.Columns[i].ColumnName, typeof(string));
}
for (int i = 0; i < dt.Rows.Count; i++)
{
dt2.ImportRow(dt.Rows[i]);
dt2.Rows[i]["OrderDate"] = Convert.ToDateTime(dt2.Rows[i]["OrderDate"]).ToString("yyyy/MM/dd");
}
this.GridView1.DataSource = dt2;
this.GridView1.DataBind();
StringBuilder sb = new StringBuilder();
for (int k = 0; k < GridView1.Columns.Count; k++)
{
sb.Append(GridView1.Columns[k].HeaderText + ',');
}
sb.Append("\r\n");
for (int i = 0; i < GridView1.Rows.Count; i++)
{
for (int k = 0; k < GridView1.Columns.Count; k++)
{
sb.Append(" " + GridView1.Rows[i].Cells[k].Text + ",");
}
sb.Append("\r\n");
}
Response.Output.Write(sb.ToString());
Response.Flush();
Response.End();
}
VB.Net
Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
If Not Me.IsPostBack Then
Dim constr As String = ConfigurationManager.ConnectionStrings("constr").ConnectionString
Using con As SqlConnection = New SqlConnection(constr)
Using cmd As SqlCommand = New SqlCommand("SELECT TOP 5 OrderID, OrderDate, ShipCountry FROM Orders", con)
Using da As SqlDataAdapter = New SqlDataAdapter(cmd)
Dim dt As DataTable = New DataTable()
da.Fill(dt)
GridView1.DataSource = dt
GridView1.DataBind()
ViewState("Data") = dt
End Using
End Using
End Using
End If
End Sub
Protected Sub btnToCSV_Click(ByVal sender As Object, ByVal e As EventArgs)
Response.Clear()
Response.Buffer = True
Response.AddHeader("content-disposition", "attachment;filename=GridViewExport.csv")
Response.Charset = ""
Response.ContentType = "application/text"
Dim dt As DataTable = TryCast(ViewState("Data"), DataTable)
Dim dt2 As DataTable = New DataTable()
For i As Integer = 0 To dt.Columns.Count - 1
dt2.Columns.Add(dt.Columns(i).ColumnName, GetType(String))
Next
For i As Integer = 0 To dt.Rows.Count - 1
dt2.ImportRow(dt.Rows(i))
dt2.Rows(i)("OrderDate") = Convert.ToDateTime(dt2.Rows(i)("OrderDate")).ToString("yyyy/MM/dd")
Next
Me.GridView1.DataSource = dt2
Me.GridView1.DataBind()
Dim sb As StringBuilder = New StringBuilder()
For k As Integer = 0 To GridView1.Columns.Count - 1
sb.Append(GridView1.Columns(k).HeaderText + ","c)
Next
sb.Append(vbCrLf)
For i As Integer = 0 To GridView1.Rows.Count - 1
For k As Integer = 0 To GridView1.Columns.Count - 1
sb.Append(" " & GridView1.Rows(i).Cells(k).Text & ",")
Next
sb.Append(vbCrLf)
Next
Response.Output.Write(sb.ToString())
Response.Flush()
Response.End()
End Sub
Screenshot
