gpt4 book ai didi

c# - ASP.Net 中的动态表格数据报告

转载 作者:太空狗 更新时间:2023-10-29 19:45:07 27 4
gpt4 key购买 nike

我正在开发一个 MVC5 网络应用程序,我需要从任何数据库表生成报告。用户将选择他想要打印的表格,然后选择要包含在报告中的列,系统应该只显示一个包含数据的网格(表格)。

在 HTML 表格中显示数据当然不是问题,我还设法生成了包含数据的 Excel 文件,用户可以下载。

不过,我还需要提供可打印的报告格式,如 PDF 或其他不需要特殊软件(如 MS Office)即可打开和打印的格式。

起初我认为我应该使用 ReportViewer 控件,但问题是我的报表是动态的,因为用户可以选择他需要的列。我看到其他人尝试生成报告定义文件,但我希望能有一些不那么难看的东西。

有没有办法获取 HTML 表格,它可以很好地计算单元格的大小,并从中创建 PDF?如果列太多,我当然不介意将报告水平拆分为多个页面。

最佳答案

你可以试试 Spartacus .

这是一个相对较新的 .NET 库,完全用 C# 编写。它可以连接到许多不同的数据库并生成 Excel 和 PDF 格式的报告。

我在 Google 云端硬盘中上传了 3 个文件:

为了使用 Spartacus,您需要引用 System.Data 和 System.Xml 包,以及 Spartacus.dll。

在下面的示例中,我通过简单的步骤从 template.xml 创建了 report.pdf:

Spartacus.Database.Generic v_database;
Spartacus.Reporting.Report v_report;
System.Data.DataTable v_table;

v_database = new Spartacus.Database.Postgresql("127.0.0.1", "database", "postgres", "password");

v_table = v_database.Query(
"select 'Example of Report made with Spartacus' as title, " +
" product, " +
" description, " +
" unit, " +
" quantity, " +
" total_cost, " +
" unit_cost " +
"from table", "REPORT");

v_report = new Spartacus.Reporting.Report(1, "template.xml", v_table);
v_report.Execute();
v_report.Save("report.pdf");

请注意,您不需要使用 Spartacus.Database 对象。如果您可以通过其他方式获得 System.Data.DataTable,则可以将其传递给 Report 对象。

但是,有一个问题。正如您在 XML 模板中所见,对于每一列,您需要知道:

  • 列名(显然)
  • 职位
  • 对齐(左、右或居中)
  • 填充(百分比,100 是页面的总宽度减去页边距的宽度)
  • 类型(INTEGER、REAL、BOOLEAN、CHAR、DATE 或 STRING)

Fill 和 Type 是必不可少的,您可能需要保留有关所有列的信息。如果这太难实现,并且您只能获取列名和类型,则可以仅基于类型计算近似值,如下所示:

  • product 是 STRING 类型,默认 fill = 30
  • description 是STRING类型,默认fill = 30
  • unit 是 STRING 类型,默认 fill = 30
  • quantity 是 REAL 类型,默认 fill = 15
  • total_cost 是 REAL 类型,默认 fill = 15
  • unit_cost 是 REAL 类型,默认 fill = 15

所有默认填充的总和是 30+30+30+15+15+15 = 135,大于 100。所以你可以标准化为 100,这样:

  • 列填充 = 列默认填充 *(默认填充的总和/100)

之后,您需要生成带有动态字段信息的动态template.xml文件。

免责声明:我是斯巴达克斯的创造者和维护者。

关于c# - ASP.Net 中的动态表格数据报告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35503724/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com