我需要创建一个简单的应用程序,它将根据数据库数据和一些用户输入生成报告。我有丰富的C / C ++经验,但对于这个项目,我们不得不选择C#。
我想避免使用需要尽可能在客户端计算机上安装的第三方组件。因此,我想避免使用即使是MS Office提供的功能(我可以使用XLS模板,就像我的前任一样,但它看起来不是一种方式;无论如何,我的前任的来源很久丢失了,这可能是好的,因为它是一个大约10年前的VB怪物,时不时地崩溃)。水晶报告和诸如此类的东西也是如此。
我目前的想法是动态构建HTML表格(使用HtmlDocument
),将它们呈现给用户(使用WebBrowser
)并打印它们。这是一个正确的方法吗?有没有更简单/更强大/更好的方法?有什么可能的陷阱?
答案 0 :(得分:2)
动态构建表可行。我经常使用这种技术,但这对我来说似乎是一种黑客攻击。我只使用它,因为很多时候,业务需求需要“足够好”和快速周转而不是“漂亮”。
我会优先考虑我自己的建议,即我自己对第三方组件有强烈的偏见。
我在大多数情况下都拒绝使用它们,并且会不遗余力地提出另一种解决方案,因为我经常因升级/许可而被烧毁。
那说......
幸运的是,使用.NET并不是所有第三方组件都需要安装到您的客户端PC上。使用XCOPY部署,通常可以在解决方案中引用.DLL或项目,并指定“始终复制”或“如果更新则复制”选项以仅包含dll(如果引用类库项目,则生成dll)并且只要.dll与可执行文件存在于同一目录中,第三方组件就可以工作。
考虑到所有这些,有一个项目,我曾用于在CodeProject从Windows窗体打印DataGridView。这是一个你可以获取,引用它,并使用它,而无需在客户端实际安装任何东西。我在多个应用程序中使用它,这是我最喜欢的工具之一。
它只会打印DataGridView,但它会完全按照屏幕上的显示进行打印,所以如果这就是你想要的,我建议至少检查一下。
作为第三种选择,您可以考虑使用ASP.NET。如果您要生成HTML,那么使用ASP.NET比使用WinForms应用程序更容易(实际上更容易)。使用ASP.NET,您可以获得Repeater,ListView等,所有这些都使报告易于创建。
我有一个以上的真实应用程序,主要是一个WinForms应用程序,但有一个相关的报告网站。
例如,我有一个WinForms应用程序,用于扫描我们零售店所接受的优惠券。这是一个WInForms应用程序,因为我需要直接与COM端口上的扫描仪进行交互。但是,对于报告部分,我设置了一个ASP.NET网站。在WinForms应用程序中,创建报告菜单选项并指向页面非常简单。我们的用户通常甚至不会考虑这是两个截然不同的应用程序。他们将其视为一个 - 他们的优惠券扫描应用程序。
关键在于,通常可以使用任何给定的工具执行操作,但使用适合工作的工具要容易得多。如果您要生成HTML报告,ASP.NET是比手动构建报告更好的工具,如果您需要为大部分UI提供WinForms应用程序,您仍然可以这样做并使用该网站报告 - 为每项任务使用最佳工具。
答案 1 :(得分:0)
也许您想查看RazorEngine,以创建HTML模板。
答案 2 :(得分:0)
我建议您Razor engine呈现html,它比使用HtmlDocument对象更灵活。
您可以使用报告模板创建文件,然后解析它,发送报告行对象的集合。