WebFormsVisual Studio 2005ADO.NET.NET 2.0Windows FormsIntermediateDevVisual StudioWindows.NETVisual BasicC#
使用 VS.NET 2005 (2.0) 报表设计器创建一对多报表






4.69/5 (53投票s)
本教程介绍如何在 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 拖到您的报表中。(这将是主列表。)
- 打开“数据源”窗口。
- 将
CategoryID
和CategoryName
字段拖到列表(主部分)中。 - 右键单击列表,然后选择“属性”。
- 单击“编辑详细信息组”。
- 在“分组依据”部分,选择主记录的 ID 字段,在本例中为
CategoryID
。 - 可选:在“文档地图标签”字段中,选择主记录的描述字段,在本例中为
CategoryName
。这将在报表查看器中提供一个可单击的树,用于在主记录之间切换。 - 可选:在末尾单击“分页符”。这将为主记录之间添加分页符。
4. 添加详细信息表
- 将一个 Table 从“报表项”工具箱部分拖到您的主列表内。
- 右键单击表的左上角,然后选择“属性”。
- 将 DataSet 名称设置为 NorthwindDataSet_Sales_by_Category 表。一些说明:报表设计器将结果集称为“DataSet”。这与 .NET Framework 的“
DataSet
”不同。报表设计器的“DataSet”更接近 .NET 的DataTable
。 - 选择“组”选项卡。
- 单击“详细信息分组...”注意:在单表主从报表中,您将改为单击“添加...” 。
- 按每个详细信息列进行分组。在本例中:
ProductName
和ProductSales
。 - 点击“确定”。
- 点击“确定”。
- 将
ProductName
字段拖到表的第一列的“详细信息”(中间)行。 - 将
ProductSales
字段拖到表第二列的“详细信息”(中间)行。 - 可选:调整父列表文本框的大小,将表的列标题设为粗体,并为 ID 添加另一个文本框标签。
- 可选:将“产品销售额”列从“数据源”拖到详细信息表的“产品销售额页脚”行。
注意:VS 会自动插入 Sum 聚合函数,该函数将提供父类别中产品的总计。
- 可选:在汇总页脚记录中添加一些描述性文本(在本例中为“总计: ”),并将详细信息和页脚值格式化为货币。
Detail: = FormatCurrency(Fields!ProductSales.Value) Footer: = "Total: " & FormatCurrency(Sum(Fields!ProductSales.Value))
5. 创建报表窗体
- 从“解决方案资源管理器”打开
Form1
。 - 将一个
ReportViewer
控件从工具箱的“数据”部分拖到窗体上。此时应该会出现一个对话框。如果此对话框消失,请使用ReportViewer
右上角的三角形按钮再次调出它。 - 在“选择报表”组合框中选择报表。
- 单击“在父容器中停靠”,使其填充整个窗体。注意:这会将
DataSet
、TableAdapter
、数据源和填充适配器的代码添加到窗体中。
运行项目。
带可选格式的
高级
1. 筛选结果(WHERE 子句)
- 在“解决方案资源管理器”中右键单击
DataSet
,然后选择“视图设计器”。 - 右键单击
DataTable
的 TableAdapter 部分,然后选择“配置...”。 - 修改 SQL 语句以包含
WHERE
子句。对于 SQL Server,您将使用命名参数@CategoryId
。OLEDB 适配器需要?
参数。 - 单击“完成”。
- 添加窗体所需的控件以提供参数值。
- 将用于填充适配器并刷新报表的代码从窗体的
Load
事件移动到将加载报表的事件。例如:“转到”按钮的Click
事件。 - 在适配器的
Fill
方法中提供所需的参数。
结论
请评论任何需要进一步说明的内容,或就实施过程中遇到的问题进行提问。另外,在对文章评分低于 5 星之前,请提供建议。