public static string WriteDataTableAsCSV(DataTable dt, string filename, string format, bool isNDARdata)
    {
        // Create a new workbook.
        SpreadsheetGear.IWorkbook workbook = SpreadsheetGear.Factory.GetWorkbook();
        int counter = 0;

        counter++;

        if (counter > 1)
        {
            workbook.Worksheets.Add();
        }

        IWorksheet worksheet = workbook.Worksheets["Sheet" + counter.ToString()];
        IRange     cells     = worksheet.Cells;

        // Set the worksheet name.
        if (dt.TableName.Length > 31)
        {
            worksheet.Name = dt.TableName.Substring(0, 31);
        }
        else if (dt.TableName != "")
        {
            worksheet.Name = dt.TableName;
        }
        else
        {
            worksheet.Name = "Sheet1";
        }

        // Get the top left cell for the DataTable.
        SpreadsheetGear.IRange range = worksheet.Cells["A1"];

        // Copy the DataTable to the worksheet range.
        range.CopyFromDataTable(dt, SpreadsheetGear.Data.SetDataFlags.None);

        cells["1:1"].Font.Bold = true;


        string user = System.Security.Principal.WindowsIdentity.GetCurrent().Name.ToString().Replace(@"AUTISM\", "");

        string csvString = "";

        string serverfilename = HttpContext.Current.Server.MapPath(@"~/App_Data/DataDump/" + filename + ".csv");



        if (isNDARdata)
        {
            //ADD The ShortName in the first row if this is an NDAR data file
            // Use SaveToMemory(...) to get a byte array copy of the range data in the CSV format.
            string dataRangeStr = Encoding.ASCII.GetString(workbook.SaveToMemory(FileFormat.CSV));

            string datafileheader = dt.TableName.Substring(0, (dt.TableName.Length - 2)) + "," + dt.TableName.Substring(dt.TableName.Length - 1, 1);

            // Prepend "header" text of the NDAR shortName and a linefeed to the rest of the CSV file.
            csvString = datafileheader + "\r\n" + dataRangeStr;
        }

        else
        {
            csvString = Encoding.ASCII.GetString(workbook.SaveToMemory(FileFormat.CSV));
        }

        // Write the text to a new file
        try
        {
            File.WriteAllText(serverfilename, csvString);
            return(serverfilename);
        }
        catch (Exception ex)
        {
            return(String.Format("ERROR_{0}", filename));
        }
    }
    public static void SaveDataTableToFile(DataTable dt, string filename, string format, bool isNDARdata)
    {
        //
        // TODO: Add constructor logic here
        //

        // Create a new workbook.
        SpreadsheetGear.IWorkbook workbook = SpreadsheetGear.Factory.GetWorkbook();
        int counter = 0;

        counter++;

        if (counter > 1)
        {
            workbook.Worksheets.Add();
        }

        IWorksheet worksheet = workbook.Worksheets["Sheet" + counter.ToString()];
        IRange     cells     = worksheet.Cells;

        // Set the worksheet name.
        if (dt.TableName.Length > 31)
        {
            worksheet.Name = dt.TableName.Substring(0, 31);
        }
        else if (dt.TableName != "")
        {
            worksheet.Name = dt.TableName;
        }
        else
        {
            worksheet.Name = "Sheet1";
        }

        // Get the top left cell for the DataTable.
        SpreadsheetGear.IRange range = worksheet.Cells["A1"];

        // Copy the DataTable to the worksheet range.
        range.CopyFromDataTable(dt, SpreadsheetGear.Data.SetDataFlags.None);

        cells["1:1"].Font.Bold = true;


        string user = System.Security.Principal.WindowsIdentity.GetCurrent().Name.ToString().Replace(@"AUTISM\", "");


        if (format == "Excel")
        {
            string serverfilename = HttpContext.Current.Server.MapPath(@"~/App_Data/DataDump/" + filename + ".xlsx");

            workbook.SaveAs(serverfilename, FileFormat.OpenXMLWorkbook);


            // Stream the Excel spreadsheet to the client in a format
            // compatible with Excel 97/2000/XP/2003/2007/2010.
            HttpContext.Current.Response.Clear();
            HttpContext.Current.Response.ContentType = "application/vnd.ms-excel";
            HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=" + filename + ".csv");
            workbook.SaveToStream(HttpContext.Current.Response.OutputStream, SpreadsheetGear.FileFormat.OpenXMLWorkbook);
            HttpContext.Current.Response.End();
        }
        else if (format == "CSV" | format == "csv")
        {
            string serverfilename = HttpContext.Current.Server.MapPath(@"~/App_Data/DataDump/" + filename + ".csv");


            if (isNDARdata)
            {
                //ADD The ShortName in the first row if this is an NDAR data file
                // Use SaveToMemory(...) to get a byte array copy of the range data in the CSV format.
                string dataRangeStr = Encoding.ASCII.GetString(workbook.SaveToMemory(FileFormat.CSV));

                string datafileheader = dt.TableName.Substring(0, (dt.TableName.Length - 2)) + "," + dt.TableName.Substring(dt.TableName.Length - 1, 1);


                // Prepend "header" text of the NDAR shortName and a linefeed to the rest of the CSV file.
                string csvString = datafileheader + "\r\n" + dataRangeStr;

                // Send to output stream
                HttpContext.Current.Response.Clear();
                HttpContext.Current.Response.ContentType = "text/csv";

                bool hasHeader = HttpContext.Current.Response.HeadersWritten;
                Debug.WriteLine(String.Format("HttpContext.Current.Response.HeadersWritten = {0}", hasHeader.ToString()));

                if (!hasHeader)
                {
                    HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=" + filename + ".csv");
                }
                HttpContext.Current.Response.Write(csvString);
                HttpContext.Current.Response.Flush();
                HttpContext.Current.Response.SuppressContent = true;
                HttpContext.Current.ApplicationInstance.CompleteRequest();
                //HttpContext.Current.Response.End();
            }

            else
            {
                workbook.SaveAs(serverfilename, FileFormat.CSV);
                HttpContext.Current.Response.Clear();
                HttpContext.Current.Response.ContentType = "application/vnd.ms-excel";
                HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=" + filename + ".csv");
                workbook.SaveToStream(HttpContext.Current.Response.OutputStream, SpreadsheetGear.FileFormat.CSV);

                HttpContext.Current.ApplicationInstance.CompleteRequest();
                //HttpContext.Current.Response.End();
            }
        }
        else if (format == "IBISVine")
        {
            //string filepath = @"\\autism-fs03\shared files\R drive\IBIS-2\Vineland_Uploads\";

            //string serverfilename = filepath  + filename ;
            string serverfilename = filename;

            //workbook.SaveAs(serverfilename, FileFormat.UnicodeText);
            HttpContext.Current.Response.Clear();
            HttpContext.Current.Response.ContentType = "application/vnd.ms-excel";
            HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=" + filename + ".csv");
            workbook.SaveToStream(HttpContext.Current.Response.OutputStream, SpreadsheetGear.FileFormat.CSV);
            HttpContext.Current.Response.End();
        }
    }