2

我需要创建一个简单的应用程序,该应用程序将根据数据库数据和一些用户输入生成报告。我有丰富的 C/C++ 经验,但对于这个项目,我们必须选择 C#。

我想尽可能避免使用需要在客户端机器上安装的第 3 方组件。因此,我什至想避免使用 MS Office 提供的功能(我本可以使用 XLS 模板,就像我的前任一样,但它看起来不像是一条路;无论如何,我前任的资源早已丢失,这可能很好,因为它是一个大约有 10 年历史的 VB 怪物,时不时崩溃)。水晶报告等也是如此。

我目前的想法是动态构建 HTML 表格(使用HtmlDocument),将它们呈现给用户(使用WebBrowser)并打印出来。这是正确的方法吗?有没有更简单/更健壮/更好的方法?可能的陷阱是什么?

4

3 回答 3

2

即时构建表格会起作用。我经常使用这种技术,但对我来说这似乎是一种黑客行为。我只使用它是因为很多时候,业务需求需要“足够好”和快速周转,而不是“漂亮”。


我将倾向于我将要建议的内容,即我自己对 3rd 方组件有强烈的偏见。

在大多数情况下,我完全拒绝使用它们,并且会不遗余力地提出另一种解决方案,因为我经常被升级/许可所困扰。

那就是说...

幸运的是,对于 .NET,并非所有第 3 方组件都需要安装到您的客户端 PC 上。使用 XCOPY 部署,您通常可以只引用解决方案中的 .DLL 或项目,并指定“始终复制”或“如果较新则复制”选项以仅包含 dll(或如果您引用类库项目,则为生成的 dll ) 并且只要 .dll 与可执行文件位于同一目录中,第 3 方组件就可以工作。

考虑到所有这些,我使用了一个项目来从CodeProject的 Windows 窗体打印 DataGridView 。这是一个您可以获取源代码、引用它并使用它的工具,而无需在客户端实际安装任何东西。我在不止一个应用程序中使用过它,它是我最喜欢的工具之一。

它只会打印 DataGridView,但它会完全按照屏幕上显示的方式打印它,所以如果这是你想要的,我建议至少检查一下。


作为第三种选择,您可以考虑使用 ASP.NET。如果您要生成 HTML,使用 ASP.NET 与在 WinForms 应用程序中一样容易(实际上更容易)。使用 ASP.NET,您可以获得Repeaters、ListViews 等,所有这些都使报表易于创建。

我有不止一个实际应用程序,主要是 WinForms 应用程序,但有一个相关的报告站点。

例如,我有一个 WinForms 应用程序,用于扫描我们零售店接受的优惠券。这是一个 WInForms 应用程序,因为我需要直接与 COM 端口上的扫描仪交互。但是,对于报告部分,我建立了一个 ASP.NET 网站。在 WinForms 应用程序中,创建报告菜单选项并指向页面非常简单。我们的用户通常甚至不会想到这是两个不同的应用程序。他们将其视为一个 - 他们的优惠券扫描应用程序。

所有这一切的重点是,通常可以使用任何给定的工具来做事,但使用适合这项工作的工具要容易得多。如果您要生成 HTML 报告,ASP.NET 是比手动构建报告更好的工具,如果您需要为大部分 UI 使用 WinForms 应用程序,您仍然可以这样做并使用该网站进行报告 - 为每项任务使用最佳工具。

于 2012-07-04T14:15:17.307 回答
0

也许您想检查RazorEngine来创建您的 HTML 模板。

于 2012-07-04T14:14:15.557 回答
0

我推荐你使用Razor 引擎来渲染 html,它比使用 HtmlDocument 对象更灵活。

您可以使用您的报告模板创建一个文件,然后解析它并发送您的报告行对象的集合。

于 2012-07-04T14:14:24.403 回答