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

使用 VS.NET 2005 (2.0) 报表设计器创建一对多报表

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.69/5 (53投票s)

2005年10月20日

CPOL

4分钟阅读

viewsIcon

426436

downloadIcon

3170

本教程介绍如何在 Visual Studio .NET 2005 (本地模式) 中创建分层 (1:m) RDLC 报表。

引言

最常见的报表类型之一是主从报表。以下教程提供了一种在 Visual Studio 2005 中创建此类报表的最直接方法。我们将使用 Access NorthWind 数据库作为数据源。如果您没有 NorthWind 数据库,可以在此处下载。

注意:SQL Server 2005 Reporting Services (.rdl) 使用类似的方法来创建主从分组。

1. 向项目添加新报表

  • 在“解决方案资源管理器”中右键单击项目。
  • 选择“添加”/“新建项”。

  • 选择“报表”。

  • 为报表命名,然后单击“添加”。

2. 为报表创建 DataSource 和 TableAdapter

  • 打开“数据源”窗口。

  • 单击“添加新数据源”按钮(左上角)。
  • 选择“数据库”。
  • 选择“新建连接...”。
  • 将 DataSource 更改为 Microsoft Access Database File。
  • 选择 NorthWind 数据库:C:\Program Files\Microsoft Office\Office\Samples\Northwind.mdb
  • 测试连接,成功后单击“确定”。
  • 单击“下一步”。
  • 单击“下一步”(“将连接字符串保存到应用程序配置文件”)。
  • 选择“视图”,然后选中“按类别销售”视图。注意:在实际操作中,您需要创建一个数据源中的平面视图,该视图在每一行中都重复顶级信息。此示例视图已按此方式创建。

    示例

    SELECT * FROM Main JOIN Detail ON Main.MainID = Detail.MainID
    "Main Info, Detail1"
    "Main Info, Detail2"
    "Main Info, Detail3"
  • 单击“完成”。现在,“NorthWindDataSet”应出现在您的“数据源”窗口中。

创建分层报表主要有三种方法,通过分组实现。本示例将使用“主列表详细信息表”方法。另外两种方法是“主列表详细信息列表”和“单表主详细信息”。使用子报表是另一种方法,可以替代分组。

3. 添加主列表

  • 打开“工具箱”。
  • 在“报表项”部分,将一个 List 拖到您的报表中。(这将是主列表。)

  • 打开“数据源”窗口。
  • CategoryIDCategoryName 字段拖到列表(主部分)中。
  • 右键单击列表,然后选择“属性”。
  • 单击“编辑详细信息组”。
  • 在“分组依据”部分,选择主记录的 ID 字段,在本例中为 CategoryID
  • 可选:在“文档地图标签”字段中,选择主记录的描述字段,在本例中为 CategoryName。这将在报表查看器中提供一个可单击的树,用于在主记录之间切换。
  • 可选:在末尾单击“分页符”。这将为主记录之间添加分页符。

4. 添加详细信息表

  • 将一个 Table 从“报表项”工具箱部分拖到您的主列表内。

  • 右键单击表的左上角,然后选择“属性”。
  • 将 DataSet 名称设置为 NorthwindDataSet_Sales_by_Category 表。一些说明:报表设计器将结果集称为“DataSet”。这与 .NET Framework 的“DataSet”不同。报表设计器的“DataSet”更接近 .NET 的 DataTable
  • 选择“组”选项卡。
  • 单击“详细信息分组...”注意:在单表主从报表中,您将改为单击“添加...” 。
  • 按每个详细信息列进行分组。在本例中:ProductNameProductSales

  • 点击“确定”。
  • 点击“确定”。
  • ProductName 字段拖到表的第一列的“详细信息”(中间)行。
  • ProductSales 字段拖到表第二列的“详细信息”(中间)行。

  • 可选:调整父列表文本框的大小,将表的列标题设为粗体,并为 ID 添加另一个文本框标签。
  • 可选:将“产品销售额”列从“数据源”拖到详细信息表的“产品销售额页脚”行。

    注意:VS 会自动插入 Sum 聚合函数,该函数将提供父类别中产品的总计。

  • 可选:在汇总页脚记录中添加一些描述性文本(在本例中为“总计: ”),并将详细信息和页脚值格式化为货币。
    Detail:  = FormatCurrency(Fields!ProductSales.Value)
    Footer:  = "Total: " & FormatCurrency(Sum(Fields!ProductSales.Value))

5. 创建报表窗体

  • 从“解决方案资源管理器”打开 Form1
  • 将一个 ReportViewer 控件从工具箱的“数据”部分拖到窗体上。此时应该会出现一个对话框。如果此对话框消失,请使用 ReportViewer 右上角的三角形按钮再次调出它。
  • 在“选择报表”组合框中选择报表。
  • 单击“在父容器中停靠”,使其填充整个窗体。注意:这会将 DataSetTableAdapter、数据源和填充适配器的代码添加到窗体中。

运行项目。

带可选格式的

高级

1. 筛选结果(WHERE 子句)

  • 在“解决方案资源管理器”中右键单击 DataSet,然后选择“视图设计器”。

  • 右键单击 DataTable 的 TableAdapter 部分,然后选择“配置...”。

  • 修改 SQL 语句以包含 WHERE 子句。对于 SQL Server,您将使用命名参数 @CategoryId。OLEDB 适配器需要 ? 参数。

  • 单击“完成”。
  • 添加窗体所需的控件以提供参数值。
  • 将用于填充适配器并刷新报表的代码从窗体的 Load 事件移动到将加载报表的事件。例如:“转到”按钮的 Click 事件。
  • 在适配器的 Fill 方法中提供所需的参数。

结论

请评论任何需要进一步说明的内容,或就实施过程中遇到的问题进行提问。另外,在对文章评分低于 5 星之前,请提供建议。

© . All rights reserved.