|
@@ -49,7 +49,10 @@ namespace InABox.Wpf.Reports
|
|
|
modelIsPopulated = false;
|
|
|
|
|
|
PrintButton.Content = ImageUtils.CreatePreviewWindowButtonContent("Print",Wpf.Resources.print);
|
|
|
- SaveButton.Content = ImageUtils.CreatePreviewWindowButtonContent("Save",Wpf.Resources.save);
|
|
|
+ SavePDFButton.Content = ImageUtils.CreatePreviewWindowButtonContent("Save PDF", Wpf.Resources.save);
|
|
|
+ SaveRTFButton.Content = ImageUtils.CreatePreviewWindowButtonContent("Save RTF", Wpf.Resources.save);
|
|
|
+ SaveExcelButton.Content = ImageUtils.CreatePreviewWindowButtonContent("Save Excel", Wpf.Resources.save);
|
|
|
+
|
|
|
foreach (var def in ReportUtils.ExportDefinitions)
|
|
|
{
|
|
|
var button = new Button();
|
|
@@ -154,10 +157,7 @@ namespace InABox.Wpf.Reports
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
- if (_report == null)
|
|
|
- {
|
|
|
- _report = ReportUtils.SetupReport(_template, _model, ShouldPopulate && !modelIsPopulated);
|
|
|
- }
|
|
|
+ _report ??= ReportUtils.SetupReport(_template, _model, ShouldPopulate && !modelIsPopulated);
|
|
|
return null;
|
|
|
}
|
|
|
catch (Exception e)
|
|
@@ -170,10 +170,7 @@ namespace InABox.Wpf.Reports
|
|
|
{
|
|
|
if (s.Result == null)
|
|
|
{
|
|
|
- if (Designer.Report == null)
|
|
|
- {
|
|
|
- Designer.Report = _report;
|
|
|
- }
|
|
|
+ Designer.Report ??= _report;
|
|
|
action();
|
|
|
CloseLoading();
|
|
|
}
|
|
@@ -280,25 +277,37 @@ namespace InABox.Wpf.Reports
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private byte[] ExportReport(ReportExportType type)
|
|
|
+ private class Exporter
|
|
|
{
|
|
|
- var _exporters = new Dictionary<ReportExportType, ExportBase>
|
|
|
- {
|
|
|
- { ReportExportType.PDF, new PDFExport() },
|
|
|
- { ReportExportType.HTML, new HTMLExport() },
|
|
|
- { ReportExportType.RTF, new RTFExport() },
|
|
|
- { ReportExportType.Excel, new Excel2003Document() },
|
|
|
- { ReportExportType.Text, new TextExport() },
|
|
|
- { ReportExportType.Image, new ImageExport() }
|
|
|
- };
|
|
|
- byte[] result = null;
|
|
|
- using (var ms = new MemoryStream())
|
|
|
+ public Type Export { get; }
|
|
|
+
|
|
|
+ public string FileExtension { get; }
|
|
|
+
|
|
|
+ public string FileFilter { get; }
|
|
|
+
|
|
|
+ public Exporter(Type export, string fileExtension, string fileFilter)
|
|
|
{
|
|
|
- _report.Export(_exporters[type], ms);
|
|
|
- result = ms.GetBuffer();
|
|
|
+ Export = export;
|
|
|
+ FileExtension = fileExtension;
|
|
|
+ FileFilter = fileFilter;
|
|
|
}
|
|
|
+ }
|
|
|
|
|
|
- return result;
|
|
|
+ private static readonly Dictionary<ReportExportType, Exporter> _exporters = new Dictionary<ReportExportType, Exporter>
|
|
|
+ {
|
|
|
+ { ReportExportType.PDF, new Exporter(typeof(PDFExport), ".pdf", "PDF Files (*.pdf)|*.pdf") },
|
|
|
+ { ReportExportType.HTML, new Exporter(typeof(HTMLExport), ".html", "HTML Files (*.html)|*.html") },
|
|
|
+ { ReportExportType.RTF, new Exporter(typeof(RTFExport), ".rtf", "RTF Files (*.rtf)|*.rtf") },
|
|
|
+ { ReportExportType.Excel, new Exporter(typeof(Excel2003Document), ".xls", "Excel Files (*.xls)|*.xls") },
|
|
|
+ { ReportExportType.Text, new Exporter(typeof(TextExport), ".txt", "Text Files (*.txt)|*.txt") },
|
|
|
+ { ReportExportType.Image, new Exporter(typeof(ImageExport), ".jpg", "JPEG Files (*.jpg, *.jpeg)|*.jpg;*.jpeg") }
|
|
|
+ };
|
|
|
+
|
|
|
+ private byte[] ExportReport(ReportExportType type)
|
|
|
+ {
|
|
|
+ using var ms = new MemoryStream();
|
|
|
+ _report.Export(Activator.CreateInstance(_exporters[type].Export) as ExportBase, ms);
|
|
|
+ return ms.GetBuffer();
|
|
|
}
|
|
|
|
|
|
private void Refresh()
|
|
@@ -316,11 +325,12 @@ namespace InABox.Wpf.Reports
|
|
|
|
|
|
private void SaveButton_Click(object sender, RoutedEventArgs e)
|
|
|
{
|
|
|
+ var exporter = _exporters[(ReportExportType)((Button)sender).Tag];
|
|
|
var dlg = new SaveFileDialog();
|
|
|
- dlg.Filter = "PDF Files (*.pdf)|*.pdf";
|
|
|
- dlg.FileName = Path.ChangeExtension(Report.FileName, ".pdf");
|
|
|
+ dlg.Filter = exporter.FileFilter;
|
|
|
+ dlg.FileName = Path.ChangeExtension(Report.FileName, exporter.FileExtension);
|
|
|
if (dlg.ShowDialog() == true)
|
|
|
- Report.Export(new PDFExport(), dlg.FileName);
|
|
|
+ Report.Export(Activator.CreateInstance(exporter.Export) as ExportBase, dlg.FileName);
|
|
|
}
|
|
|
|
|
|
|