В этой статье мы рассмотрим вопрос интеграции Stimulsoft в WinUI-проекты.
WinUI - это инфраструктура пользовательского интерфейса (UI) для настольных приложений Windows, включая управляемые приложения, использующие C# и .NET, и собственные приложения, использующие C++ с Win32 API. WinUI 3 обеспечивает последовательный, интуитивно понятный и доступный опыт с использованием новейших шаблонов пользовательского интерфейса. Специального решения Stimulsoft для WinUI не существует, однако для встраивания системы отчетности можно воспользоваться компонентом Stimulsoft.Reports.Web.NetCore, а при необходимости интегрирования систем аналитики - Stimulsoft.Dashboards.Web.NetCore. Важно!

Генератор отчетов для .NET Core позволяет создавать отчеты любой сложности - от стандартных счетов-фактур до комплексных документов с параметрами, интерактивной сортировкой и детализацией. Однако, нативные визуальные компоненты, вьювер и дизайнер отчетов, для фреймворка WinUI отсутствуют, а компоненты из пакетов .NET Core работают непредсказуемо. Это обусловлено некоторыми особенностями самого фреймворка WinUI. Поэтому, на данный мы не рекомендуем встраивать вьювер или дизайнер в WinUI-проекты.
В то же время, отчет может быть сгенерирован и отображен как результат его экспорта. Например, как PDF-файл или HTML. Предварительно должен быть установлен пакет SDK Windows App SDK C# Templates. В установщике Visual Studio этот SDK располагается в категории .NET Desktop Development.

ШАГ 1

Для начала следует создать и инициализировать новый проект WinUIBlank App, Packaged (WinUI 3 in Desktop).

ШАГ 2

При создании Blank App, Packaged (WinUI 3 in Desktop) уже содержит демо-проект, в который мы интегрируем наши инструменты. Во-первых, в этот демо-проект следует установить NuGet-пакет для системы отчетности - Stimulsoft.Reports.Web.NetCore или, если требуется также аналитика данных - Stimulsoft.Dashboards.Web.NetCore.

ШАГ 3

Необходимо добавить файлы отчетов в проекты. Это могут быть файлы шаблонов отчетов или дашбордов (*.mrt, *.mrz, *.mrx), а также файлы построенных отчетов (*.mdc, *.mdz, *.mdx). Например, добавим шаблон отчета Invoice.mrt в папку Assets. Обратите внимание!

Чтобы файл был доступен, необходимо установить его свойство "Build Action" в значение "Embedded resource".

ШАГ 4

Далее в файле MainWindow.xaml следует добавить разметку для отображения WebView2:

MainWindow.xaml
<?xml version="1.0" encoding="utf-8"?>
<Window
       x:Class="App1.MainWindow"
       xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
       xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
       xmlns:local="using:App1"
       xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
       xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
       mc:Ignorable="d"
       Title="App1">

        <Grid VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
                <Grid.RowDefinitions>
                        <RowDefinition Height="100" />
                        <RowDefinition Height="*" />
                </Grid.RowDefinitions>

                <Button x:Name="button" HorizontalAlignment="Center" VerticalAlignment="Center"
                       Content="Click To Show Report"
                       Click="Button_Click" />

                <WebView2 x:Name="webView" Grid.Row="1" />>

        </Grid>
</Window>

ШАГ 5

На этом этапе нужно добавить в файл MainWindow.xaml.cs код загрузки и отображения отчета в WebView2 при обработке события "нажатие кнопки":

MainWindow.xaml.cs
using System;
using System.IO;
using System.Reflection;
using Microsoft.UI.Xaml;
using Stimulsoft.Report;
using Stimulsoft.Report.Export;

// To learn more about WinUI, the WinUI project structure,
// and more about our project templates, see: http://aka.ms/winui-project-info.

namespace App1
{
        /// <summary>
        /// An empty window that can be used on its own or navigated to within a Frame.
        /// </summary>
        public sealed partial class MainWindow : Window
        {
                public MainWindow()
                {
                        this.InitializeComponent();
                }

                private async void Button_Click(object sender, RoutedEventArgs e)
                {
                        button.Content = "Clicked";

                        // Load the report
                        var report = new StiReport();

                        var reportStream = Assembly.GetExecutingAssembly().GetManifestResourceStream("App1.Assets.Christmas.mrt");

                        report.Load(reportStream);

                        // Export the report to PDF
                        report.Render();

                        using var pdfStream = new MemoryStream();

                        report.ExportDocument(StiExportFormat.Pdf, pdfStream, new StiPdfExportSettings());

                        var pdfString = Convert.ToBase64String(pdfStream.ToArray());

                        await webView.EnsureCoreWebView2Async();

                        // Display the PDF in a WebView2 control
                        webView.NavigateToString(
                                @$"<html><head></head><body><div><object type=""application/pdf"" width=""100%"" height=""100%"" data=""data:application/pdf;base64,{pdfString}""></object></div></body></html>");
                }
        }
}

Integration of Stimulsoft tools into WinUI projects

Таким образом, при разработке приложений Blank App, Packaged (WinUI 3 in Desktop) можно использовать системы отчетности и аналитики данных без использования вьювера и дизайнера отчетов. Более подробно об использовании .NET Core Stimulsoft можно узнать в документации. Активация продукта Stimulsoft.Reports.Web.NetCore доступна по подписке Reports.WEB, а Stimulsoft.Dashboards.Web.NetCore - по подписке Dashboards.WEB. Также, в онлайн магазине можно приобрести комплексное решение для систем отчетности и аналитики под различные платформы - подписку Stimulsoft Ultimate.
Используя этот сайт, вы соглашаетесь на использование файлов Cookie для аналитики и персонализированного контента. Файлы Cookie хранят полезную информацию на вашем компьютере, чтобы помочь нам повысить эффективность и удобство использования. Для получения дополнительной информации, пожалуйста, прочтите Конфиденциальность и Использование Cookie.