В настоящее время есть DataTable, но вы хотите передать его пользователю через WebHandler. FileHelpers имеет CommonEngine.DataTableToCsv(dt, "file.csv")
. Однако он сохраняет файл. Как я могу сохранить его в потоке? Я знаю, как это сделать, когда я знаю столбцы в расширенном или они не меняются, но я хочу сгенерировать заголовки столбцов прямо из таблицы данных.Преобразование DataTable в 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());
К сожалению, поскольку я не знаю столбцов перед рукой, я не могу создать класс перед рукой.
Вы можете проверить это https://gist.github.com/riyadparvez/4467668 – user
Файл Помощники библиотека с открытым исходным кодом. Почему бы вам не взломать его и добавить свой собственный метод? – Keltex
@user: Этот текст содержит ошибку, в которой записи с запятыми обрабатываются неправильно. См. Http://stackoverflow.com/q/769621/1461424 – Krumia