Creat a class file and write method for getting csv
file bytes as output with DataTable as input.
namespace ExcelCSVHelper
{
public static class ExcelCSVByteHelper
{
private class CsvRow : List<string>
{
public string
LineText { get; set;
}
}
private class CsvFileWriter : StreamWriter
{
public CsvFileWriter(Stream
stream)
: base(stream)
{
}
public CsvFileWriter(string
filename)
: base(filename)
{
}
/// <summary>
/// Writes a single row to
a CSV file.
/// </summary>
/// <param name="row">The row to be written</param>
public void WriteRow(CsvRow row)
{
StringBuilder builder = new StringBuilder();
bool firstColumn = true;
foreach (string
value in row)
{
// Add separator if this isn't the first value
if (!firstColumn)
builder.Append(',');
// Implement special handling for values that
contain comma or quote
// Enclose in quotes and double up any double
quotes
if (value.IndexOfAny(new char[] { '"', ','
}) != -1)
builder.AppendFormat("\"{0}\"", value.Replace("\"", "\"\""));
else
builder.Append(value);
firstColumn = false;
}
row.LineText = builder.ToString();
WriteLine(row.LineText);
}
}
public static byte[] Get_CSV_Stream(DataTable
dt)
{
byte[] content = null;
try
{
int Row_Count = dt.Rows.Count,
Column_Count = dt.Columns.Count;
// Write data to CSV file
using (MemoryStream
stream = new MemoryStream())
{
using (CsvFileWriter
writer = new CsvFileWriter(stream))
{
DataRow dr;
#region Header Section
CsvRow Head_row = new CsvRow();
for
(int i = 0; i < Column_Count; i++)
{
Head_row.Add(string.Format("{0}",
dt.Columns[i].ColumnName));
}
writer.WriteRow(Head_row);
#endregion
#region Non-Header Section
for (int i = 0; i < Row_Count;
i++)
{
dr = dt.Rows[i];
CsvRow row = new CsvRow();
for (int j = 0; j
< Column_Count; j++)
{
row.Add(string.Format("{0}",
dr[j]));
}
writer.WriteRow(row);
}
#endregion
if (stream.Length > 0)
{
content =
stream.ToArray();
}
}
}
}
catch
{
//do nothing
}
return content;
}
}
}
Call it from web
page:
protected void Page_Load(object sender, EventArgs
e)
{
GetXLCSV();
}
private void GetXLCSV()
{
DataTable dt = Get_Data();
byte[] content = ExcelCSVHelper.ExcelCSVByteHelper.Get_CSV_Stream(dt);
Download_File(content,0);
}
private DataTable
Get_Data()
{
DataTable dt = new
DataTable();
dt.Columns.Add("SNo");
dt.Columns.Add("Name");
dt.Columns.Add("Address");
dt.Columns.Add("Created");
for (int i = 0; i
< 2000; i++)
{
DataRow dr = dt.NewRow();
dr["SNo"] = i + 1;
dr["Name"] = "Name" + i;
dr["Address"] = "Address" + i;
dr["Created"] = DateTime.Now.ToString("dd-MMM-yyyy");
dt.Rows.Add(dr);
dt.AcceptChanges();
}
return dt;
}
private void
Download_File(byte[] content,int type)
{
string FileName = string.Empty;
if (type == 0)
{
FileName = "MyFile.csv";
}
else
{
FileName = "MyFile.xls";
}
if (content != null)
{
Response.ContentType = "application/octet";
Response.AddHeader("Content-Disposition",
string.Format("attachment;filename={0}",
FileName));
Response.BinaryWrite(content);
Response.End();
Response.Close();
Response.Flush();
}
}