Manage Exporting Capabilities in ASP.NET MVC
- 8 minutes to read
The Web Dashboard allows users to export an entire dashboard or individual dashboard items.
Server-Side API
DashboardExtensionSettings
The ASP.NET MVC Dashboard extension’s server-side API allows you to customize the default export options, customize export documents at runtime, etc.
- DashboardExtensionSettings.AllowExportDashboard
- Gets or sets whether end-users can export a dashboard.
- DashboardExtensionSettings.AllowExportDashboardItems
- Gets or sets whether end-users can export dashboard items.
- DashboardExtensionSettings.PdfExportOptions
- Provides access to options related to exporting a dashboard/dashboard item to PDF format.
- DashboardExtensionSettings.ImageExportOptions
- Provides access to options related to exporting a dashboard/dashboard item to an image.
- DashboardExtensionSettings.ExcelExportOptions
- Provides access to options related to exporting a dashboard item to Excel format.
- DashboardConfigurator.BeforeExportDocument
- Allows you to hide specific dashboard items when exporting the entire dashboard.
- DashboardConfigurator.CustomExport
- Allows you to customize the exported document.
- DashboardConfigurator.CustomizeExportDocument
- Allows you to customize the stream containing the resulting document (such as PDF, Image, or Excel).
WebDashboardExporter
The WebDashboardExporter allows you to implement server export for the ASP.NET MVC Dashboard extension.
- WebDashboardExporter.ExportDashboardItemToExcel
- Exports the dashboard item to the specified stream in Excel format.
- WebDashboardExporter.ExportDashboardItemToImage
- Exports the dashboard item to the specified stream in Image format.
- WebDashboardExporter.ExportDashboardItemToPdf
- Exports the dashboard item to the specified stream in PDF format.
- WebDashboardExporter.ExportToExcel
- Exports a dashboard to the specified stream in Excel format.
- WebDashboardExporter.ExportToImage
- Exports a dashboard to the specified stream in Image format.
- WebDashboardExporter.ExportToPdf
- Exports a dashboard to the specified stream in PDF format.
To use WebDashboardExporter
API, pass the default DashboardConfigurator
instance to the WebDashboardExporter
constructor.
using DevExpress.DashboardWeb;
//...
WebDashboardExporter exporter = new WebDashboardExporter(DashboardConfigurator.Default);
Then, use the required method exposed by WebDashboardExporter to export a dashboard or dashboard item (such as WebDashboardExporter.ExportToPdf or WebDashboardExporter.ExportDashboardItemToImage).
DashboardExporter
You can use the non-visual DashboardExporter component to implement server-side export of a dashboard or dashboard items without referencing dashboard UI controls ( DashboardDesigner, DashboardViewer, ASPxDashboard, and so on) or DashboardConfigurator.
To integrate the DashboardExporter
into a service, register the DevExpress NuGet feed as a package source and install the DevExpress.Dashboard.Core package. See the DashboardExporter class description for details.
Implement Server-Side Export
The WebDashboardExporter class allows you to implement server export for the ASP.NET MVC Dashboard extension and ASP.NET Core Dashboard control. You can specify a dashboard state and export options to be applied to the resulting document. Refer to the WebDashboardExporter class description for more information.
This example demonstrates how to export a dashboard displayed using the ASP.NET MVC Dashboard extension on the server side using the WebDashboardExporter class. The following API is used to implement this capability:
- The ASPxClientDashboard.BeforeRender event is handled to obtain the client-side DashboardControl using the ASPxClientDashboard.GetDashboardControl method.
- The AJAX request is used to send the dashboard identifier and state to the server side. On the server side, these values are received as action method parameters and passed to the WebDashboardExporter.ExportToPdf method.
using DevExpress.DashboardCommon;
using DevExpress.DashboardWeb;
using System;
using System.IO;
using System.Web.Mvc;
namespace MvcDashboard_ServerExport.Controllers {
public class HomeController : Controller {
public ActionResult Index() {
return View();
}
[HttpPost]
public ActionResult ExportDashboardToPdf(string DashboardID, string DashboardState) {
using (MemoryStream stream = new MemoryStream()) {
string dashboardID = DashboardID;
DashboardState dashboardState = new DashboardState();
dashboardState.LoadFromJson(DashboardState);
DashboardPdfExportOptions pdfOptions = new DashboardPdfExportOptions();
pdfOptions.ExportFilters = true;
pdfOptions.DashboardStatePosition = DashboardStateExportPosition.Below;
string dateTimeNow = DateTime.Now.ToString("yyyyMMddHHmmss");
string filePath = "~/App_Data/Export/" + dashboardID + "_" + dateTimeNow + ".pdf";
ASPxDashboardExporter exporter = new ASPxDashboardExporter(DashboardConfigurator.Default);
exporter.ExportToPdf(dashboardID, stream, new System.Drawing.Size(1024, 768), dashboardState, pdfOptions);
SaveFile(stream, filePath);
ContentResult result = new ContentResult();
result.Content = filePath;
return result;
}
}
private void SaveFile(MemoryStream stream, string path) {
var fileStream = System.IO.File.Create(Server.MapPath(path));
stream.WriteTo(fileStream);
fileStream.Close();
}
}
}
function onBeforeRender(sender) {
var control = sender.getDashboardControl();
control.registerExtension(new DevExpress.Dashboard.DashboardPanelExtension(control));
$("#buttonContainer").dxButton({
text: "Export to PDF",
onClick: function (param) {
var dashboardID = control.dashboardContainer().id;
var dashboardStateJson = control.dashboard().state();
$.ajax({
url: 'Home/ExportDashboardToPdf',
data: {
DashboardID: dashboardID,
DashboardState: JSON.stringify(dashboardStateJson)
},
type: 'POST',
}).success(function (result) {
DevExpress.ui.notify('A dashboard was exported to ' + result, 'success', 5000);
});
}
});
}
Client-Side API
You can use the Web Dashboard’s client-side API for exporting to various formats, customizing export options, etc. For this, use the members of the DashboardExportExtension:
- exportToPdf
- Exports the entire dashboard to a PDF file.
- exportToImage
- Exports the entire dashboard to an image.
- exportToExcel
- Exports the entire dashboard to an Excel file.
- exportDashboardItemToPdf(itemName)
- Exports a dashboard item to a PDF file.
- exportDashboardItemToImage(itemName)
- Exports a dashboard item to an image.
- exportDashboardItemToExcel(itemName)
- Exports a dashboard item to an Excel file.
- getPdfExportOptions
- Returns options related to exporting a dashboard/dashboard item to PDF format.
- getImageExportOptions
- Returns options related to exporting a dashboard/dashboard item to the Image format.
- getExcelExportOptions
- Returns options related to exporting a dashboard/dashboard item to Excel format.
- setPdfExportOptions(options)
- Sets options related to exporting a dashboard/dashboard item to PDF format.
- setImageExportOptions(options)
- Sets options related to exporting a dashboard/dashboard item to the Image format.
- setExcelExportOptions(options)
- Sets options related to exporting a dashboard/dashboard item to Excel format.
- showExportDashboardDialog(format)
- Invokes the dialog that allows end-users to export the entire dashboard to the specified format.
- showExportDashboardItemDialog(itemComponentName, format)
- Invokes the dialog that allows end users to export the dashboard item to the specified format.
Custom Export
The Dashboard Control raises the ASPxDashboard.CustomExport/DashboardConfigurator.CustomExport event before saving the exported document to the PDF and Image formats. The event allows you to customize the exported document.
- Use the e.GetPrintableControl and e.GetPrintableControls methods to obtain a printable control(s) for a specific dashboard item or the entire dashboard.
- Use the e.Report property to customize the underlying report.
The following table illustrates dashboard items and their corresponding printable XRControls:
Example: How to Customize Dashboard Items in the Exported Document
The following example shows how to customize dashboard items in the exported document when you handle the ASPxDashboard.CustomExport / DashboardConfigurator.CustomExport events. You can use the CustomExportWebEventArgs.GetPrintableControls method to obtain the printable controls.
using DevExpress.DashboardCommon;
using DevExpress.DashboardWeb;
using DevExpress.XtraCharts;
using DevExpress.XtraReports.UI;
using System;
using System.Drawing;
using System.Linq;
protected void CustomizeExport(object sender, CustomExportWebEventArgs e) {
foreach(var printControl in e.GetPrintableControls()) {
if(printControl.Value is XRGaugeDashboardItem) {
var gaugeItemName = printControl.Key;
var gaugeDashboardItem = e.GetDashboardItem(gaugeItemName) as GaugeDashboardItem;
foreach(var dashGaugeElement in gaugeDashboardItem.Gauges) {
foreach(var gaugePanel in e.GetGaugeContext(gaugeItemName).GetPrintableGauges(dashGaugeElement).Cast<XRDashboardGauge>()) {
if(gaugePanel != null) {
gaugePanel.MainSeriesLabel.ForeColor = Color.Red;
}
}
}
}
if(printControl.Value is XRChart) {
var chartItemName = printControl.Key;
var chartDashboardItem = e.GetDashboardItem(chartItemName) as ChartDashboardItem;
foreach(var pane in chartDashboardItem.Panes) {
if(pane.Series.Count > 0) {
foreach(var dashSeries in pane.Series) {
if(dashSeries != null) {
var controlSeries = e.GetChartContext(chartItemName).GetControlSeries(dashSeries);
if(controlSeries != null) {
foreach(var ser in controlSeries) {
LineSeriesView view = ser.View as LineSeriesView;
if(view != null) {
view.LineStyle.DashStyle = DashStyle.DashDot;
}
}
}
}
}
}
}
}
}
}
Example: How to Add Custom Information to the Exported Dashboard
The following example shows how to specify header and footer content of an exported dashboard. For this, the CustomExport event is used.
Example: How to Add a Custom Header to Each Sheet
The following example shows how to add a custom header to each sheet for the exported Excel workbook. For this, the CustomizeExportDocument event is used.
Example: How to export the Dashboard to PDF with Different Filter Values on Different Pages
The following example shows how to export a dashboard with different dashboard states (different master filter value) to separate pages and join them to a single PDF document. Multiple exported documents are joined in a single file with the help of the PdfDocumentProcessor class.
Example: Non-Visual Custom Export
This example shows how to use the DashboardExporter component in a console application to export a dashboard with a custom Funnel item.