65.9K
CodeProject 正在变化。 阅读更多。
Home

Visual Studio 报表生成器的最佳实践

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.33/5 (4投票s)

2023年2月6日

CPOL

6分钟阅读

viewsIcon

9491

本文概述了 Visual Studio 对 combit 报表生成器 List & Label 的集成。

在编写 Windows 和 Web 应用程序时,使用 Microsoft 的 Visual Studio 绝对是明智之举。因此,组件供应商正努力支持 Visual Studio 生态系统。本文概述了 Visual Studio 对 combit 的 报表生成器 List & Label 的集成。欢迎尝试免费且功能齐全的 试用版

使用 Visual Studio 进行报表

任何处理数据的 .NET 应用程序迟早都需要一种用户友好的方式来显示这些数据。这时报表生成器就派上用场了。它们提供了在 Visual Studio 中直接连接到不同数据源的快速便捷方法。通过报表设计器,可以创建和调整布局模板,最终打印成多种导出格式,如 PDF、XHTML、Microsoft Excel 或 Microsoft Word。在许多情况下,也希望将设计器提供给应用程序的最终用户。 

绑定到常见的 .NET 数据源

在开始报表之前,需要准备好数据。由于应用程序通常使用特定格式的数据,因此组件应能够直接从那里开始。这需要对各种数据格式进行最广泛的支持。

为报表和分析选择数据源

绑定到标准的 .NET 数据源

ADO.NET 提供了一个统一的驱动程序模型,用于将 Visual Studio 连接到 .NET 数据源。List & Label 支持所有标准数据源,如 Microsoft SQL Server、PostgreSQL、MySql 或 SQLite。此外,还直接支持云数据源,如 Azure CosmosDB 或 REST。当然,也不能忽略标准的 ADO 数据对象,如 DataSet、DataTable 或 DataViewManager。

通过一个单独的接口 IDataProvider 来实现这种支持。这个抽象层还允许用户为以前不支持的数据源贡献自己的额外数据提供程序。combit 也通过开源项目(例如在 GitHub 上)推广这一点。List & Label 的生态系统是开放的,并邀请社区参与和扩展。 

绑定到 .NET 业务对象

除了上述数据源外,List & Label 还使用反射支持绑定到业务对象。这提供了重要的额外灵活性。用户因此可以处理他们在 Visual Studio 代码中使用的对象和类。 .NET 提供了许多接口,如 IBindingListView 或 IQueryable/LINQ,它们支持具有排序和过滤功能的扩展绑定。在这里提供最广泛的支持至关重要——毕竟,组件应该适应现有数据,而不是反过来。

绑定到 Entity Framework 数据

Entity Framework,或者更普遍地说,ORM(对象关系映射)工具对业务对象的序列化到数据库进行了抽象。通常的 CRUD 操作可以在对象级别执行,而 ORM 工具则提供必要的持久化。相应地,绑定到 EF 对象就是绑定到业务对象。出于性能考虑,组件应负责支持相应 ORM 框架的现有延迟加载技术,以避免不必要的数据库流量和内存消耗。List & Label 支持这些场景。

从 Visual Studio 启动报表设计器

建立与数据源的连接后,就可以从 Visual Studio 中调用报表设计器。必须确保对各种项目类型(如 WinForms、WPF 或 ASP.NET)的最佳支持。报表应在这些类型之间可互换,以支持桌面应用程序轻松迁移到云端。List & Label 正是这样做的。

Windows 应用程序

在 Windows 应用程序(包括 WPF 和 WinForms)中,可以将设计器作为单独的窗口启动。许多报表生成器在此处提供直接的 Visual Studio 设计器。List & Label 采取了不同的方法,提供了一个独立的设计器窗口。优点是:所有编辑器、对话框等都可以针对最终用户的便利性进行单独调整和优化。此外,它不需要最终用户安装 Visual Studio shell。报表设计器对开发人员和最终用户是相同的。如果用户不应拥有所有可能性,则可以有选择地限制功能。

然后,实际调用设计器是 `ListLabel` 类的某个方法。连接到 SQL 数据源及其后续设计的最小代码如下所示:

// build the connection srtring
var builder = new SqlConnectionStringBuilder();
builder.DataSource = "dbserver";
builder.InitialCatalog = "CustomerData";

// initialize the connection to the database
var connection = new SqlConnection(builder.ConnectionString);

// establish a matching List & Label data provider
var sqlProvider = new SqlConnectionDataProvider(connection);

// connect to this provider and start the Designer
using (var LL = new ListLabel())
{
    LL.DataSource = sqlProvider;
    LL.Design();
}

Web 应用程序

对于 Web 应用程序,拥有对不同前端技术的广泛支持非常重要。让前端依赖于使用的组件是没有意义的。另一方面,组件必须能够处理所有常见的 JavaScript 框架。List & Label 依赖于 WebComponent 技术,这确保了最佳支持。为了方便上手,包含了一些示例,展示了该组件如何在 Visual Studio Code 中与 React、Angular、Vue.js 或 Blazor 等一起使用。对于后端,该组件依赖于 ASP.NET MVC,这是最常见的后端技术之一。这确保了用户最大的灵活性。

只需实现一个控制器即可打开 Web 报表设计器。代码如下:

public override void OnProvideListLabel(ProvideListLabelContext provideListLabelContext)
{
    // establish a matching List & Label data provider, see above
    var sqlProvider = new SqlConnectionDataProvider(...);

    ListLabel LL = new ListLabel();
    LL.DataSource = sqlProvider;
    provideListLabelContext.NewInstance = LL;
}

重新分发报表组件

组件由一组二进制文件组成,需要将它们重新分发到目标计算机。有许多不同的方法——通过这样做,组件制造商应确保重新分发尽可能简单且万无一失,以避免不必要的挫败感。以下是 List & Label 支持的一些可能性。

XCopy 部署

这是最简单的共享方式。无需注册或安装任何二进制文件,可以直接将文件复制到目标计算机。combit 甚至包含一个重新分发向导。它允许您从可选组件中进行选择,然后自动创建一个包含所需二进制文件的 ZIP 存档。这些文件与应用程序一起被复制到目标计算机。再简单不过了。

NuGet 支持

另一种选择是使用包管理器。对于 Visual Studio 和 .NET 程序集,NuGet 是首选格式。使用 NuGet 包时,所有必需的二进制文件都会在编译器的输出目录中创建。然后可以从那里复制或处理结果。这也是用户处理复杂依赖项的一种非常简单的方法。

数据源配置向导

更深入的 Visual Studio 集成

Visual Studio 包

Visual Studio 提供各种扩展包。组件制造商可以例如将自己的菜单项添加到 Visual Studio。List & Label 利用自动添加 NuGet 包,或提供有用的资源,如教程、示例中心或组件文档。同样,可以从这个中心位置执行更新检查。对于 WinForms 和 WPF 项目,还可以将用于显示报表设计器和预览的对话框添加到当前项目中。组件作者几乎没有限制,Visual Studio 的模块化和可扩展性非常全面。

总结

本文演示了报表生成器 List & Label 的 Visual Studio 集成深度。这些结果或多或少适用于 VS 生态系统的任何数据绑定组件。务必查看 List & Label 以了解其工作原理。 

© . All rights reserved.