Following is the function in c# which will export passed gridview to csv file. Note that this function not work if gridview have Autogeneratedcolumn property to true, to make it dynamic you have to add column through code, how to do that see category Gridview posts.
public static void ExportToCsv(string fileName, GridView gv,string Title)
{
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.AddHeader("content-disposition", string.Format("attachment; filename={0}", fileName));
HttpContext.Current.Response.ContentType = "application/ms-excel";
using (StringWriter objSw = new StringWriter())
{
// Create a table to contain the grid
Table table = new Table();
// include the gridline settings
table.GridLines = gv.GridLines;
objSw.Write("Report: " + Title + "");
objSw.Write(objSw.NewLine);
objSw.Write("Report Date: "+DateTime.Now.ToString());
objSw.Write(objSw.NewLine);
objSw.Write(objSw.NewLine); objSw.Write(objSw.NewLine);
// add the header row to the table
int NoOfColumn = gv.Columns.Count;
//Create Header
for (int i = 0; i < NoOfColumn; i++)
{
objSw.Write(gv.Columns[i].HeaderText);
//check not last column
if (i < NoOfColumn - 1)
{
objSw.Write(",");
}
}
objSw.Write(objSw.NewLine);
//Create Data
foreach (GridViewRow dr in gv.Rows)
{
for (int i = 0; i < NoOfColumn; i++)
{
objSw.Write(PrepareControlForExportToCsv(dr.Cells[i]).Replace(",",""));
if (i < NoOfColumn - 1)
{
objSw.Write(",");
}
}
objSw.Write(objSw.NewLine);
}
// render the htmlwriter into the response
HttpContext.Current.Response.Write(objSw.ToString());
HttpContext.Current.Response.End();
}
}
private static string PrepareControlForExportToCsv(Control control)
{
for (int i = 0; i < control.Controls.Count; i++)
{
Control current = control.Controls[i];
if (current is Literal)
{
return (current as Literal).Text;
}
else if (current is Label)
{
return (current as Label).Text;
}
if (current.HasControls())
{
GridViewExportUtil.PrepareControlForExportToCsv(current);
}
}
if (control is TableCell)
return (control as TableCell).Text;
else
return "";
}
Comments
Post a Comment