В настоящее время есть 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());
К сожалению, поскольку я не знаю столбцов перед началом работы, я не могу создать класс перед началом работы.