【发布时间】:2010-10-27 15:42:11
【问题描述】:
当前有一个 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());
不幸的是,由于我事先不知道列,因此我无法事先创建类。
【问题讨论】:
-
文件助手库是开源的。你为什么不破解它并添加你自己的方法?
-
@user:此要点包含一个错误,即无法正确处理带有逗号的条目。见stackoverflow.com/q/769621/1461424