Конвертировать DataTable в поток CSV

В настоящее время есть DataTable, но вы хотите передать его пользователю через WebHandler.FileHelpers имеетCommonEngine.DataTableToCsv(dt, "file.csv"), Однако это сохраняет его в файл. Как я могу сохранить его в поток вместо этого? Я знаю, как это сделать, когда я знаю столбцы в расширенном режиме или они не меняются, но я хочу генерировать заголовки столбцов прямо из таблицы данных.

Если я знаю столбцы, я просто создаю класс:

[DelimitedRecord(",")]
public class MailMergeFields
{
    [FieldQuoted()]
    public string FirstName;
    [FieldQuoted()]
    public string LastName;
}

Затем используйте FileHelperEngine и добавьте записи:

FileHelperEngine engine = new FileHelperEngine(typeof(MailMergeFields));

MailMergeFields[] merge = new MailMergeFields[dt.Rows.Count + 1];

// add headers
merge[0] = new MailMergeFields();
merge[0].FirstName = "FirstName";
merge[0].LastName = "LastName";

int i = 1;              
// add records
foreach (DataRow dr in dt.Rows)
{
    merge[i] = new MailMergeFields();
    merge[i].FirstName = dr["Forename"];
    merge[i].LastName = dr["Surname"];
    i++;
}

Наконец напишите в поток:

TextWriter writer = new StringWriter();
engine.WriteStream(writer, merge);
context.Response.Write(writer.ToString());

К сожалению, поскольку я не знаю столбцы заранее, я не могу создать класс заранее.

Ответы на вопрос(9)

Ваш ответ на вопрос