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

使用 SQL 查询生成动态报告

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.32/5 (25投票s)

2005年8月25日

2分钟阅读

viewsIcon

205729

downloadIcon

4440

使用 PrintDocument 组件和 SQL 查询的动态报表。

Sample Image

Sample Image- Multilines

引言

Microsoft Visual Studio .NET 提供了 Crystal Reports 用于报表打印,并将 `DataReport` 组件(Visual Studio 6)从 .NET 中移除。 虽然 Crystal Reports 是一个不错的报表创建器,但有时当我们想要创建动态报表,例如列出某些内容或进行数据汇总时,它并不是那么合适。 Crystal Reports 可以用于动态报表,但它具有固定的列类型集和最大列数。

所以我使用了 `.NET` 基础库 `System.Drawing.Printing` 命名空间中的 `PrintDocument` 组件。 `PrintDocument` 是一个类似普通纸张的组件。 您可以在其上绘制或打印任何内容。 通常,您必须设置对象坐标和其他属性,就像使用笔在纸上书写一样。 但对于此代码,您只需使用 SQL 查询或数据集!

使用代码

将一个窗体和一个 `PrintDocument` 组件添加到项目中。 并使用一个 `DataSet`,并通过严格的格式指定第一个表 ( `Table(0)` ) 的列(每 1 个报表列 1 组)

  • 第 1 列 -> 列名。
  • 第 2 列 -> 纸张上的起始位置,我设置了所有宽度都在 0-99 之间。
  • 第 3 列 -> 纸张上的结束位置,我设置了所有宽度都在 0-99 之间。
  • 第 4 列 -> 对齐方式(L-左对齐,R-右对齐,C-居中)。
  • 第 5 列 -> 是否在此列中进行汇总 (Y/N)。
  • 第 6 列 -> 显示格式(例如 #,##0.00)。
  • 第 7 列 -> 是否换行? 从 1 开始。
  • 第 8 列 -> 数据列。

请看示例,很容易理解。

我们可以设置 `PageSetDlg` 和 `prnSetDlg` 对象的属性以进行打印选项设置。 我使用 Form 组件,并将 `PrintDocument`、`PrintPreviewDialog`、`PageSetupDialog` 和 `PrintDialog` 组件放在上面。 然后,我们可以使用这些进行直接打印或使用打印对话框。 我们可以设置这些对象的属性以进行特定的打印选项设置,例如将页面方向设置为横向等。

'-------- Example use, If you haved data in
'           dataset already. --------------

'--- We can set properties of PageSetDlg
    ' and prnSetDlg object for print option 
    'frmDynamicPrint.PageSetDlg.PageSettings.Landscape = True

    '---If it has sum column is this report,
    '   we have to set hasSum flag to true. 
    frmDynamicPrint.hasSum = True

'---Initialization
    frmDynamicPrint.FontName = "Tahoma"
    frmDynamicPrint.FontSize = 12
    frmDynamicPrint.FontSizeHead = 16
    frmDynamicPrint.FontSizeHead2 = 14
    frmDynamicPrint.LineHeight = 1
    frmDynamicPrint.SkipLinePerRecord = 1

    '---Call InitPrint for inital some properties,
    ' you can modify it.
    frmDynamicPrint.InitPrint()

    frmDynamicPrint.HeadFirstString = _
      "Report for Product Order Value Summary"
    frmDynamicPrint.HeadSecondString = "Test Report"
    frmDynamicPrint.DateString = Now.ToString
    frmDynamicPrint.PrintPreview()
    frmDynamicPrint.Dispose()

关注点

稍后我将开发一个 HTML 报告,或者添加一个将报告导出为另一种格式的功能。

历史

  • 2005 年 11 月 27 日 - 修复了示例中设置页码的一个小错误。
  • 2005 年 11 月 24 日 - 修复了查询循环和汇总方法中的一个大错误。 非常抱歉我迟迟才修复此错误。
  • 2005 年 10 月 05 日 - 添加了文本换行功能。
  • 2005 年 9 月 13 日 - 添加了多行和设置每行高度的功能。 它也可以像文本换行功能一样使用。
  • 2005 年 9 月 12 日 - 更改了纸张上的列位置寻址。 使用起始-结束位置而不是一个位置。
© . All rights reserved.