Attualmente dispone di un DataTable, ma desidera inviarlo in streaming all'utente tramite un WebHandler. FileHelpers ha CommonEngine.DataTableToCsv(dt, "file.csv")
. Tuttavia lo salva in un file. Come posso invece salvarlo su uno stream? So come farlo quando so che le colonne sono avanzate o non cambiano, ma voglio generare le intestazioni delle colonne direttamente dalla tabella dei dati.Converti DataTable in stream CSV
Se so che le colonne ho appena creare la classe:
[DelimitedRecord(",")]
public class MailMergeFields
{
[FieldQuoted()]
public string FirstName;
[FieldQuoted()]
public string LastName;
}
quindi utilizzare FileHelperEngine e aggiungere i record:
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++;
}
Infine scrivere in un flusso:
TextWriter writer = new StringWriter();
engine.WriteStream(writer, merge);
context.Response.Write(writer.ToString());
Purtroppo, dato che non conosco le colonne in mano, non posso creare la classe in anticipo.
Check questo https://gist.github.com/riyadparvez/4467668 – user
La biblioteca Helper file è open source. Perché non ci credi e aggiungi il tuo metodo? – Keltex
@user: questo elenco contiene un bug in cui le voci con virgole non verranno gestite correttamente. Vedi http://stackoverflow.com/q/769621/1461424 – Krumia