Skip to main content
All docs
V24.2

Use DevExpress Blazor Report Viewer in .NET MAUI Blazor Hybrid App

  • 5 minutes to read

This topic describes how to create a .NET MAUI Blazor Hybrid application with a Report Viewer.

net maui blazor app with viewer

View Example: Reporting for MAUI Blazor - Simple Report Viewer Application

The following platforms are available:

  • Android
  • iOS
  • macOS

Prerequisites

  • Visual Studio 2022 17.3+
  • The .NET Multi-platform App UI workload. Refer to the following article for information on how to install this workload: Installation.
  • ASP.NET and web development workload.

1. Create a Project

  1. Create a new project in Visual Studio and select the .NET MAUI Blazor App template.

    maui new project

  2. Specify the project name and location in the next window.

  3. Select .NET 8 as the target framework and click Create.

    image

1.1 Additional Set Up and Known Issues

2. Add DevExpress Nuget Packages

Visit nuget.devexpress.com, log in to your account, and click Obtain Feed URL. Open the NuGet Package Manager in Visual Studio and register the DevExpress NuGet feed as the package source. Install the following packages:

DevExpress.Blazor.Reporting.Viewer
This package implements the functionality related to the native Blazor DevExpress Report Viewer component.
DevExpress.Drawing.Skia
This package implements the drawing functionality based on the Skia Graphics Library.

If you are new to NuGet packages, see the following installation guide for assistance: Install DevExpress Packages Using NuGet Package Manager.

3. Add Graphics Packages

If you need to work with fonts or other graphics entities, make sure that you add the following packages to your project:

4. Select the Target Device

.NET MAUI apps are designed to run on multiple operating systems and devices. While you develop the application, you can select a device/emulator for test and debug runs.

Select a Debug Target in the Visual Studio toolbar. This example uses an Android device.

android emulator

5. Register Application Resources and Fonts

Register Resources

Register the required namespaces in the _Imports.razor file:

@using <Namespace>
@using <Namespace>.Shared

Open the MauiProgram.cs file and add using <Namespace>.Data. Once added, call the following methods:

Register Fonts

FontsMauiAppBuilderExtensions.ConfigureFonts method in the MauiProgram class and pass fonts used by your application. Refer to the following article for more information on fonts in .NET MAUI: Fonts in .NET MAUI.

Tip

Use the DevExpress.Drawing.DXFontRepository class to register custom fonts. Refer to the following article for more information: Use DXFontRepository to Add Custom Fonts.

The code sample below registers fonts and resources:

public static MauiAppBuilder CreateMauiApp()
{
    var builder = MauiApp.CreateBuilder();
    builder
        .UseMauiApp<App>()
        .ConfigureFonts(fonts =>
        {
            fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
        });

    builder.Services.AddMauiBlazorWebView();
    builder.Services.AddDevExpressBlazor();
    builder.Services.AddDevExpressWebAssemblyBlazorReportViewer();
    //...
}

Include Stylesheets

Add the following lines to the wwwwroot/index.html file:

<head>
  <!--...-->
    <link href="_content/DevExpress.Blazor.Themes/blazing-berry.bs5.min.css" asp-append-version="true" rel="stylesheet" />
    <link rel="stylesheet" href="_content/DevExpress.Blazor.Reporting.Viewer/css/dx-blazor-reporting-components.bs5.css" />
  <!--...-->
</head>

6. Add Document Viewer

Create Razor Page with the Document Viewer

Add Report Viewer for WebAssembly (Native) component to a Razor page (ReportViewer.razor). Use the DxReportViewer.Report property to specify a report to open.

The code below adds the DxReportViewer component to the ReportViewer.razor page. The XtraReport Report field is used to specify a report class to instantiate and display (XtraReport1 class).

@page "/reportviewer/"

@using DevExpress.Blazor.Reporting
@using DevExpress.Blazor.Reporting.Viewer.Internal.Services;
@using DevExpress.XtraReports.UI
@using DxReportViewerMauiApp.PredefinedReports

<DxReportViewer @ref="reportViewer" Report="Report" SizeMode="DevExpress.Blazor.SizeMode.Small">
</DxReportViewer>

@code {
    DxReportViewer reportViewer;
    XtraReport Report = new XtraReport1();

    protected override async Task OnAfterRenderAsync(bool firstRender)
    {
        if(firstRender)
            await reportViewer.UpdateZoomAsync(0.5);
        await base.OnAfterRenderAsync(firstRender);
    }
}

Add a Navigation Menu Item

Add a navigation menu item to the NavMenu.razor page:

<div class="@NavMenuCssClass" @onclick="ToggleNavMenu">
    <nav class="flex-column">
        <!-- ... -->
        <div class="nav-item px-3">
            <NavLink class="nav-link" href="reportviewer">
                <span class="oi oi-list-rich" aria-hidden="true"></span> Report Viewer
            </NavLink>
        </div>
    </nav>
</div>

7. Add a Report to the Application

Generate a Simple Report in Code

You can create a report in code as described in the following help topic: Create a Report in Code.

Generate a Simple Report in Visual Studio Report Designer

The Visual Studio Report Designer is not available in .NET MAUI applications. Visual Studio IDE may ask you to download the .NET Core and System.Drawing.Common package to invoke the report designer.

Alternatively, you can generate a report in a separate class library and reference it in your project. Review the following help topic for more information: Create a Report in Visual Studio.

Once the report is ready, call the XtraReport.FromFile(String, Boolean) or XtraReport.FromStream(Stream, Boolean) methods to load the created report.

8. Create the Export Service

Create a IExportProcessor implementation to create an export processor. Call the builder.Services.AddScoped method in the MauiProgram class to register the implementation.

The code sample below shows an implementation that shares a file in the selected format.

public class SharedReportExportProcessor : IExportProcessor
{
    public async Task ProcessExportResult(ExportResultItem exportResultItem, bool isPrintOperation)
    {
        var fileName = Path.Combine(FileSystem.CacheDirectory, exportResultItem.FileName);
        using (var file = File.Create(fileName))
        {
            file.Write(exportResultItem.Bytes);
        }

        await Share.Default.RequestAsync(new ShareFileRequest
        {
            Title = "Share a Report",
            File = new ShareFile(fileName)
        });
    }
}
using DevExpress.Blazor.Reporting.Services;
using Microsoft.Extensions.Logging;
`...
public static class MauiProgram {
    public static MauiApp CreateMauiApp() {
        var builder = MauiApp.CreateBuilder();
        // ...
        builder.Services.AddScoped<IExportProcessor, SharedReportExportProcessor>(); 
        return builder.Build();
    }
}

8. View the Result

The application is now ready. Run the project to see the result.

net maui blazor app with viewer

See Also