目录
在编写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还使用Reflection来支持绑定到业务对象。这也提供了重要的额外灵活性。因此,用户可以处理他们在Visual Studio代码中使用的对象和类。.NET提供了许多接口,如IBindingListView或IQueryable/LINQ,它们支持具有排序和筛选的扩展绑定。在这里提供尽可能广泛的支持至关重要——毕竟,组件应该适应现有数据,而不是相反。
绑定到实体框架数据
实体框架,或者更一般地说——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部署
这是最简单的分享方式。不需要注册或安装任何二进制文件,文件可以直接复制到目标计算机。Comit甚至包括一个重新分发向导。它允许您从可选组件中进行选择,然后自动创建包含所需二进制文件的ZIP存档。这些内容将与应用程序一起复制到目标计算机。这再简单不过了。
NuGet支持
另一种方法是使用包管理器。对于Visual Studio和.NET程序集,NuGet是首选格式。使用NuGet包时,将在编译器的输出目录中创建所有必需的二进制文件。可以从那里复制或处理结果。对于用户来说,这也是一种非常简单的方法,甚至可以处理复杂的依赖项。
用于配置数据源的向导
更深入的Visual Studio集成
Visual Studio包
Visual Studio提供了不同的扩展包。例如,组件制造商可以将自己的菜单项添加到Visual Studio中。例如,List & Label利用NuGet包的自动添加,或提供有用的资源,如教程、示例中心或组件的文档。同样,可以从此中心位置执行更新检查。对于WinForms和WPF项目,还可以添加用于显示报表设计器和预览的对话框到当前项目。组件作者几乎没有限制,Visual Studio的模块化和可扩展性非常全面。
总结
本文演示了Visual Studio与报表生成器List & Label集成的深度。结果或多或少适用于VS生态系统的任何数据绑定组件。请务必查看List&Label以了解其工作原理。
https://www.codeproject.com/Articles/5353164/Best-Practices-for-Visual-Studio-Report-Generator