Actualmente tiene una DataTable, pero desea transmitirla al usuario a través de un WebHandler. FileHelpers tiene CommonEngine.DataTableToCsv(dt, "file.csv")
. Sin embargo, lo guarda en un archivo. ¿Cómo puedo guardarlo en una transmisión en su lugar? Sé cómo hacerlo cuando conozco las columnas avanzadas o no cambian, pero quiero generar los encabezados de las columnas directamente desde la tabla de datos.Convertir DataTable a CSV stream
Si sé que las columnas que acabo de crear la clase:
[DelimitedRecord(",")]
public class MailMergeFields
{
[FieldQuoted()]
public string FirstName;
[FieldQuoted()]
public string LastName;
}
a continuación, utilizar FileHelperEngine y añadir los registros:
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++;
}
Finalmente escritura en un flujo:
TextWriter writer = new StringWriter();
engine.WriteStream(writer, merge);
context.Response.Write(writer.ToString());
Lamentablemente, como no conozco las columnas anteriores, no puedo crear la clase de antemano.
Usted puede comprobar esto https://gist.github.com/riyadparvez/4467668 – user
La biblioteca de complementos de archivos es de código abierto. ¿Por qué no te metas y añades tu propio método? – Keltex
@user: esta esencia contiene un error donde las entradas con comas no se manejarán correctamente. Ver http://stackoverflow.com/q/769621/1461424 – Krumia