Standalone Report Parameters Panel in ASP.NET Core Applications
- 5 minutes to read
This tutorial describes how to add the Standalone Report Parameters Panel control to an ASP.NET Core web application.
DevExpress Reporting applications that include the Standalone Report Parameters Panel component are composed of two parts - the server (backend) and the client.
Prerequisites
Visual Studio workloads:
- ASP.NET and web development
- .NET Core cross-platform development
Note
Review the following help topic: Reporting .NET/.NET Core Limitations.
Configure the Server Part (Backend)
Install the following NuGet packages:
For more information on how to install NuGet packages for DevExpress components, review the following help topic: Choose Between Offline and Online DevExpress NuGet Feeds.
Open Program.cs and add the following code:
using DevExpress.AspNetCore; using DevExpress.AspNetCore.Reporting; //... var builder = WebApplication.CreateBuilder(args); // Add services to the container. builder.Services.AddControllersWithViews(); builder.Services.AddDevExpressControls(); builder.Services.AddMvc(); builder.Services.ConfigureReportingServices(configurator => { configurator.ConfigureWebDocumentViewer(viewerConfigurator => { viewerConfigurator.UseCachedReportSourceBuilder(); }); }); // ... var app = builder.Build(); app.UseDevExpressControls(); System.Net.ServicePointManager.SecurityProtocol |= System.Net.SecurityProtocolType.Tls12; // ...
Like the Document Viewer component, the Standalone Parameter Panel requires a controller to handle requests. In the Controllers folder, create a
ReportingControllers.cs
file with the following content:using DevExpress.AspNetCore.Reporting.WebDocumentViewer; using DevExpress.AspNetCore.Reporting.WebDocumentViewer.Native.Services; public class CustomWebDocumentViewerController : WebDocumentViewerController { public CustomWebDocumentViewerController(IWebDocumentViewerMvcControllerService controllerService) : base(controllerService) { } }
Create a new report with several parameters. Save the report as
TestReport.repx
(XML format). Review the following topic for more information: Add a New Report in Visual Studio.Tip
To edit a report without Microsoft Visual Studio, you can use VS Code with a dedicated extension:
Visual Studio Code (VS Code) Report Designer Extension (CTP)
Create a Reports folder in the project. Paste the
TestReport.repx
file created in the previous step. Specify that the file should be copied to the output directory.Create and register a report resolution service that translates report identifiers to report instances. For this purpose, implement the IReportProvider interface in the
CustomReportProvider.cs
class as follows:using DevExpress.XtraReports.Services; using DevExpress.XtraReports.UI; public class CustomReportProvider : DevExpress.XtraReports.Services.IReportProvider { public XtraReport GetReport(string id, ReportProviderContext context) { var reportNameToOpen = id ?? "TestReport"; string path = $"Reports\\{reportNameToOpen}.repx"; if (!System.IO.File.Exists(path)) return new XtraReport(); return XtraReport.FromXmlFile(path); } }
Register the custom service at application startup:
using DevExpress.XtraReports.Services; // ... builder.Services.AddScoped<IReportProvider,CustomReportProvider>();
Add a controller action that supplies the model for the client-side Parameters Panel component. Use the following code example:
using DevExpress.XtraReports.Web.ParametersPanel; using Microsoft.AspNetCore.Mvc; // ... public IActionResult Panel( [FromQuery] string reportName, [FromServices] IReportParametersPanelClientSideModelGenerator clientSideModelGenerator) { reportName = string.IsNullOrEmpty(reportName) ? "TestReport" : reportName; ReportParametersPanelModel parametersPanelModel = clientSideModelGenerator.GetModel(reportName, WebDocumentViewerController.DefaultUri); return View("Panel", parametersPanelModel); }
If the report uses data from a database, add a connection string to the
appsettings.json
file and reference the libraries needed to interact with the database. If a sample report retrieves data from thenwind.db
SQLite database (a database file from DevExpress demos), install the System.Data.SQLite.Core NuGet package, copy thenwind.db
file to the Data folder, specify that the file should be copied to the output directory, and add the following connection string:"ConnectionStrings": { "NWindConnectionString": "XpoProvider=SQLite;Data Source=|DataDirectory|Data/nwind.db" }
Configure the Client (Frontend) Part
Install the following npm libraries:
Modify the
bundleconfig.json
file (if exists) or add a new file with the following content:[ { "outputFileName": "wwwroot/css/dx.material.orange.light.bundle.css", "inputFiles": [ "node_modules/devextreme-dist/css/dx.material.orange.light.css", "node_modules/@devexpress/analytics-core/dist/css/dx-analytics.material.orange.light.css" ], "minify": { "enabled": false, "adjustRelativePaths": false } }, { "outputFileName": "wwwroot/css/thirdparty.bundle.css", "inputFiles": [ "node_modules/bootstrap/dist/css/bootstrap.min.css", "node_modules/devextreme-dist/css/dx.light.css" ], "minify": { "enabled": false, "adjustRelativePaths": false } }, { "outputFileName": "wwwroot/css/viewer.part.bundle.css", "inputFiles": [ "node_modules/@devexpress/analytics-core/dist/css/dx-analytics.common.css", "node_modules/devexpress-reporting/dist/css/dx-webdocumentviewer.css" ], "minify": { "enabled": false, "adjustRelativePaths": false } }, { "outputFileName": "wwwroot/js/site.thirdparty.bundle.js", "inputFiles": [ "node_modules/jquery/dist/jquery.min.js", "node_modules/bootstrap/dist/js/bootstrap.min.js" ], "minify": { "enabled": false }, "sourceMap": false }, { "outputFileName": "wwwroot/js/reporting.thirdparty.bundle.js", "inputFiles": [ "node_modules/knockout/build/output/knockout-latest.js", ], "minify": { "enabled": false }, "sourceMap": false }, { "outputFileName": "wwwroot/js/viewer.part.bundle.js", "inputFiles": [ "node_modules/devextreme-dist/js/dx.all.js", "node_modules/@devexpress/analytics-core/dist/js/dx-analytics-core.min.js", "node_modules/devexpress-reporting/dist/js/dx-webdocumentviewer.min.js" ], "minify": { "enabled": false }, "sourceMap": false } ]
Note
If your application already uses libraries listed above, remove duplicate library references to ensure they are registered only once.
Modify the
libman.json
file (if it exists) or add a new file with the following content:{ "version": "1.0", "defaultProvider": "filesystem", "libraries": [ { "library": "node_modules/devextreme-dist/css/icons/", "destination": "wwwroot/css/icons", "files": [ "dxiconsmaterial.ttf", "dxiconsmaterial.woff", "dxiconsmaterial.woff2", "dxicons.ttf", "dxicons.woff2", "dxicons.woff" ] } ] }
Add a Standalone Report Parameters Panel Control
Reference the DevExpress.AspNetCore namespace in the _ViewImports.cshtml file. Alternatively, you can reference this namespace in the view that contains the Standalone Report Parameters Panel control.
@using DevExpress.AspNetCore
Add the following links to the Layout.cshtml page’s head section (the Views | Shared folder):
<link rel="stylesheet" href="~/css/thirdparty.bundle.css" /> <script src="~/js/thirdparty.bundle.js"></script>
Create a View with the following content:
@model DevExpress.XtraReports.Web.ParametersPanel.ReportParametersPanelModel @{ var panelRender = Html.DevExpress().ReportParametersPanel("ParametersPanel") .Height("100%") .Width("750px") .Bind(Model); @panelRender.RenderHtml() } @section Scripts { <link rel="stylesheet" href="~/css/viewer.part.bundle.css" /> <link rel="stylesheet" href="~/css/dx.material.orange.light.bundle.css" /> <script src="~/js/reporting.thirdparty.bundle.js"></script> <script src="~/js/viewer.part.bundle.js"></script> @panelRender.RenderScripts() }
Run the Application
The application’s page contains the Standalone Report Parameters Panel control that displays parameters from the TestReport
report:
Next Steps
For information on how to apply parameter values obtained from the Standalone Report Parameters Panel to the report, review the following help topic: How to Use Parameter Values from the Standalone Report Parameters Panel (ASP.NET Core App).