public ExportedTable Export(ResultsListReport report) { var table = new ExportedTable(); table.Title = report.Metadata.Title; foreach (var athleteField in athleteFields) { table.Groups.Add("Athlete"); table.Headers.Add(athleteField.Title); } var fieldSets = new List <List <IExportedTableColumn <ResultsListReportEntrySubresult> > >(); foreach (var reportColumn in report.Metadata.Columns) { var fieldSet = GetFieldSet(reportColumn.PrimaryComponent != null, reportColumn.HasFinalPoints); if (fieldSet == null) { continue; } foreach (var field in fieldSet) { table.Groups.Add(reportColumn.Title); table.Headers.Add(field.Title); } fieldSets.Add(fieldSet); } foreach (var entry in report.Results) { var row = new List <string>(); foreach (var athleteField in athleteFields) { row.Add(athleteField.Extract(entry.Athlete)); } for (var i = 0; i < fieldSets.Count; i++) { var subresult = entry.Subresults[i]; var fieldSet = fieldSets[i]; foreach (var field in fieldSet) { row.Add(field.Extract(subresult)); } } table.Rows.Add(row); } return(table); }
public HttpResponseMessage ExportTable(ExportedTable table) { XElement htmlTitle = string.IsNullOrEmpty(table.Title) ? null : new XElement("title", table.Title); XElement htmlPageHeader = string.IsNullOrEmpty(table.Title) ? null : new XElement("h1", table.Title); XElement htmlTableHead = new XElement("thead"); if (table.Groups.Count > 0) { htmlTableHead.Add(BuildHeaderRow(table.Groups)); } htmlTableHead.Add(BuildHeaderRow(table.Headers)); XElement htmlTableBody = new XElement("tbody"); foreach (var row in table.Rows) { htmlTableBody.Add(BuildDataRow(row)); } XDocument document = new XDocument( new XDocumentType("html", null, null, null), new XElement( "html", new XElement("head", htmlTitle), new XElement( "body", htmlPageHeader, new XElement("table", htmlTableHead, htmlTableBody)))); var xmlSettings = new XmlWriterSettings { Indent = true, IndentChars = " ", OmitXmlDeclaration = true, NewLineHandling = NewLineHandling.None }; using (var stream = new MemoryStream()) { using (var xmlWriter = XmlWriter.Create(stream, xmlSettings)) { document.WriteTo(xmlWriter); } var message = new HttpResponseMessage(HttpStatusCode.OK); message.Content = new ByteArrayContent(stream.ToArray()); message.Content.Headers.ContentType = new MediaTypeHeaderValue("text/html"); return(message); } }
public ExportedTable Export(StartingListReport report) { ExportedTable table = new ExportedTable(); table.Title = report.Title; foreach (var column in columns) { table.Headers.Add(column.Title); } foreach (var entry in report.Entries) { var row = new List <string>(); foreach (var column in columns) { row.Add(column.Extract(entry)); } table.Rows.Add(row); } return(table); }
public HttpResponseMessage ExportTable(ExportedTable table) { using (var stream = new MemoryStream()) { using (var writer = new StreamWriter(stream, Encoding.UTF8, 4096, true)) { ExportRow(writer, table.Headers); foreach (var row in table.Rows) { ExportRow(writer, row); } } var message = new HttpResponseMessage(HttpStatusCode.OK); message.Content = new ByteArrayContent(stream.ToArray()); message.Content.Headers.ContentType = new MediaTypeHeaderValue("text/csv"); message.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment") { FileName = table.Title + ".csv" }; return(message); } }