如何在 Balzor Web 应用中集成 RDLC 报表?

Zhi Lv - MSFT 32,021 信誉分 Microsoft 供应商
2024-02-27T06:19:39.8133333+00:00

你好,

是否可以在 Blazor Web 应用中调用 RDLC 报表,或者使用报表查看器加载 RDLC 报表?我在最新框架中没有看到报告选项。有人可以分享将 RDLC 报表与 .NET Blazor 框架集成的示例和资源吗?谢谢。

注意: 此问题总结整理于:在 Blazor Web 应用中集成 RDLC 报表

诚挚的问候

Blazor
Blazor
一个免费的开源 Web 框架,使开发人员能够使用 Microsoft 开发的 C# 和 HTML 创建 Web 应用。
15 个问题
0 个注释 无注释
{count} 票

接受的答案
  1. XuDong Peng-MSFT 10,176 信誉分 Microsoft 供应商
    2024-02-27T07:08:45.58+00:00

    你好,

    由于.rdlc 报表是基于.NET Framework 的,因此您可以在Windows平台中使用 RDLC, 不支持 Linux。 您可以按照我的步骤实现此要求: 第一步,创建 Blazor Web 应用程序和 Windows Forms 应用: User's image

    第二步,在 Windows Forms 应用中创建RDLC报表,并将其复制到 Blazor Web 应用程序: User's image

    第三步,单击 Report1.rdlc 文件 (1),然后右键单击 Parameters 文件夹以添加新的 Parameter()。然后右键单击空白区域以插入测试框: User's image

    然后将 ReportParameter1 拖到文本框中。这些步骤中的所有配置项都使用默认值,您可以直接单击“下一步”创建它们: User's image

    第四步,我在 Blazor Web App 中使用 Controller 来呈现数据:

    Program.cs
     
    using RDLC_BlazorWebApp.Components;
     
    namespace RDLC_BlazorWebApp
    {
        public class Program
        {
            public static void Main(string[] args)
            {
                var builder = WebApplication.CreateBuilder(args);
                builder.Services.AddRazorComponents()
                    .AddInteractiveServerComponents();
                // add this line
                builder.Services.AddControllers();
     
                var app = builder.Build();
    
                if (!app.Environment.IsDevelopment())
                {
                    app.UseExceptionHandler("/Error");
                    app.UseHsts();
                }
                app.UseHttpsRedirection();
                app.UseStaticFiles();
                app.UseAntiforgery();
                app.MapRazorComponents<App>()
                    .AddInteractiveServerRenderMode();
                // add this line
                app.MapControllers();
                app.Run();
            }
        }
    }
    Home控制器
    using AspNetCore.Reporting;
    using Microsoft.AspNetCore.Components.RenderTree;
    using Microsoft.AspNetCore.Mvc;
     
    namespace RDLC_BlazorWebApp.Controllers
    {
        [ApiController]
        [Route("[controller]")]
        public class HomeController : Controller
        {
            private readonly ILogger<HomeController> _logger;
            private readonly IWebHostEnvironment _webHostEnvironment;
     
            public HomeController(ILogger<HomeController> logger, IWebHostEnvironment webHostEnvironment)
            {
                _logger = logger;
                this._webHostEnvironment = webHostEnvironment;
                System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);
     
            }
            [HttpGet("print")]
            public IActionResult Print() {
                string mimetype = "";
                int extension = 1;
                var path = $"{this._webHostEnvironment.WebRootPath}\\Reports\\Report1.rdlc";
                Dictionary<string,string> parameters = new Dictionary<string,string>();
                parameters.Add("ReportParameter1", "RDLC in Blazor Web Application.");
                LocalReport localReport = new LocalReport(path);
                var result = localReport.Execute(RenderType.Pdf, extension,parameters,mimetype);
                return File(result.MainStream,"application/pdf");
            }
        }
    }
    

    第五步(必须的),我的项目文件,注意安装的包:

    <Project Sdk="Microsoft.NET.Sdk.Web">
      <PropertyGroup>
        <TargetFramework>net8.0</TargetFramework>
        <Nullable>enable</Nullable>
        <ImplicitUsings>enable</ImplicitUsings>
      </PropertyGroup>
      <ItemGroup>
        <Content Remove="wwwroot\Reports\Report1.rdlc" />
      </ItemGroup>
     
      <ItemGroup>
        <EmbeddedResource Include="wwwroot\Reports\Report1.rdlc">
          <CopyToOutputDirectory>Always</CopyToOutputDirectory>
        </EmbeddedResource>
      </ItemGroup>
     
      <ItemGroup>
        <PackageReference Include="AspNetCore.Reporting" Version="2.1.0" />
        <PackageReference Include="System.CodeDom" Version="8.0.0" />
        <PackageReference Include="System.Drawing.Common" Version="8.0.0" />
        <PackageReference Include="System.Security.Permissions" Version="8.0.0" />
        <PackageReference Include="System.Text.Encoding.CodePages" Version="8.0.0" />
      </ItemGroup>
    </Project>
    

    第六步,其他的:
    User's image

    <div class="top-row ps-3 navbar navbar-dark">
        <div class="container-fluid">
            <a class="navbar-brand" href="">RDLC_BlazorWebApp</a>
        </div>
    </div>
     
    <input type="checkbox" title="Navigation menu" class="navbar-toggler" />
     
    <div class="nav-scrollable" onclick="document.querySelector('.navbar-toggler').click()">
        <nav class="flex-column">
            <div class="nav-item px-3">
                <NavLink class="nav-link" href="" Match="NavLinkMatch.All">
                    <span class="bi bi-house-door-fill-nav-menu" aria-hidden="true"></span> Home
                </NavLink>
            </div>
     
            <div class="nav-item px-3">
                <NavLink class="nav-link" href="counter">
                    <span class="bi bi-plus-square-fill-nav-menu" aria-hidden="true"></span> Counter
                </NavLink>
            </div>
     
            <div class="nav-item px-3">
                <NavLink class="nav-link" href="weather">
                    <span class="bi bi-list-nested-nav-menu" aria-hidden="true"></span> Weather
                </NavLink>
            </div>
            <div class="nav-item px-3">
                <NavLink class="nav-link" href="home/print">
                    <span class="bi bi-list-nested-nav-menu" aria-hidden="true"></span> RDLC
                </NavLink>
            </div>
        </nav>
    </div>
    

    第七步,测试结果: Animation


    如果答案是正确的,请点击“接受答案”并点赞。 如果您对此答案还有其他疑问,请点击“评论”。 注意:如果您想接收相关电子邮件,请按照我们的文档中的步骤启用电子邮件通知 此线程的通知。

    0 个注释 无注释

0 个其他答案

排序依据: 非常有帮助