示例和演练
演练:安装 AdventureWorks 数据库
下载 adventureworksdb.msi.
确认 SQL Server 数据目录
SQLCMD -S (local)\sqlexpress -E
select physical_name from sys.database_files where name = 'master' go
将 AdventureWorks 附加到 SQL Server 中
exec sp_attach_db @dbname=N'AdventureWorks', @filename1=N'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\AdventureWorks_Data.mdf', @filename2=N'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\AdventureWorks_log.ldf' go
演练:创建 ReportViewer 报表
创建新的基于 Windows 的应用程序项目
-
打开 Visual Studio。在“文件”菜单上,指向“新建”,然后选择“项目”。
-
在“项目类型”窗格中,选择 Visual Basic。
-
在“模板”窗格中,选择“Windows 应用程序”以创建基于 Microsoft Windows 的应用程序。
-
在“名称”框中,键入“SimpleReport”。
-
在“位置”框中,输入要保存项目的目录,或者单击“浏览”以导航到该目录。
随即会打开 Windows 窗体设计器,其中将显示所创建的项目的“Form1”。
-
单击该窗体。从“视图”菜单中选择“属性窗口”。展开“大小”属性,以显示“宽度”和“高度”。将“宽度”设置为 500 像素。
定义数据源连接和数据表
-
在解决方案资源管理器中,右击名为“SimpleReport”的项目(并非解决方案),指向“添加”,然后选择“新建项”。如果“解决方案资源管理器”窗口不可见,请在“视图”菜单中单击“解决方案资源管理器”。
-
在“添加新项”对话框中,单击“数据集”。为数据集键入名称,然后单击“添加”。默认名称为“DataSet1.xsd”。
这会向项目中添加一个新的 XSD 文件并打开数据集设计器。
-
在“视图”菜单中单击“设计器”。打开工具箱,然后将“TableAdapter”控件拖动到“数据集”设计图面上。
这将启动“TableAdapter 配置向导”。
-
在“选择您的数据连接”页中,单击“新建连接”。
-
在“添加连接”页上,请执行下列步骤:
-
在“数据源”框中,选择“Microsoft SQL Server”。
-
在“服务器名称”框中,输入 AdventureWorks 数据库所在的服务器。
默认的 SQL Server Express 实例为“(local)\sqlexpress”。
-
在下拉列表中,单击“AdventureWorks”。
-
单击“确定”继续返回到向导,再单击“下一步”。
-
-
在“将连接字符串保存到应用程序配置文件中”页上,为连接字符串键入名称或接受默认的“AdventureWorksConnectionString”。单击“下一步”。
-
在“选择命令类型”页上,选择“使用 SQL 语句”,然后单击“下一步”。
-
在“输入 SQL 语句”页上,输入以下 Transact-SQL 查询以便从 AdventureWorks 数据库中检索销售数据,然后单击“完成”:
SELECT S.OrderDate, S.SalesOrderNumber, S.TotalDue AS TotalSales, C.FirstName, C.LastNameFROM HumanResources.Employee E INNER JOIN Person.Contact C ON E.ContactID = C.ContactID INNER JOIN Sales.SalesOrderHeader S ON E.EmployeeID = S.SalesPersonID
此外还可以单击“查询生成器”按钮,然后使用查询生成器创建查询并使用“执行查询”按钮加以验证。
现在,数据集设计器将显示“DataTable1”的 DataTable 定义,其中各个字段均以查询的列和列别名命名(“OrderDate”、“SalesOrderNumber”、“TotalSales”、“FirstName”和“LastName”)。在将数据绑定到报表数据区域时,将在“数据源”窗口中用到这些字段.
如下图:
添加新报表定义文件
- 在“项目”菜单中,指向“添加新项” 。
- 在“添加新项”对话框中,单击“报表”。
- 在“名称”中,键入“Sales Orders.rdlc”,然后单击“添加”打开图形设计图面。
- 图形设计图面是 Visual Studio 2008 中报表设计器组件的一部分
向报表布局中添加表
-
将“Sales Orders.rdlc”置于图形设计模式下,然后在“视图”菜单中选择“工具箱”。
随即将打开工具箱。
-
在工具箱的“数据”部分中,单击“表”,然后单击报表设计图面。
报表设计器将显示一个表,此表包含三列,横跨报表的整个宽度。
-
单击该表,以便在表的上方和旁边显示列句柄和行句柄。
-
在第一列上,右击句柄,然后单击“在左侧插入列”。
-
从“table1”的“属性”窗口中,展开“Size”节点。默认情况下,“属性”窗口停靠在解决方案资源管理器下方。通过在“视图”菜单中选择“属性窗口”,也可以打开此窗口。
-
将“Size”节点的“Width”属性设置为“4.8 英寸”。这会将表宽和列宽设置为在窗体中进行查看时所需的空间。
-
在报表设计器中,单击设计图面。
-
在“属性”窗口中,展开“Size”节点并将“Width”设置为“5 英寸”。
-
在“数据源”窗口中,单击“DataTable1”节点,以将其展开并显示各个数据字段。接下来,请执行下列步骤:
-
将“数据源”窗口中的“LastName”字段拖动到表中第一列的中间(详细信息)行内。
-
将字段拖至中间单元时,会发生两件事。
首先,详细信息单元格将包含以下文本:“=Fields!LastName.Value”。此文本是一个字段表达式,用于为“LastName”字段指定数据值。添加到“详细信息”行的字段始终被指定为表达式。
其次,列标题值自动放置在紧邻字段表达式上面的第一行。默认情况下,该列是根据相应的字段名称生成的。如果字段名称使用 Pascal 大小写格式,列名中的每个单词都将变为首字母大写,且单词之间用空格分隔。例如“LastName”将变为“Last Name”。
-
将“数据源”窗口中的“OrderDate”字段拖动到表中第二列的中间(详细信息)行内。
-
将“数据源”窗口中的“SalesOrderNumber”字段拖动到表中第三列的中间(详细信息)行内。
-
将“数据源”窗口中的“TotalSales”字段拖动到表中最后一列的中间(详细信息)行内。
下图显示了已使用下列字段填充的表数据区域:“LastName”、“OrderDate”、“SalesOrderNumber”和“TotalSales”。
-
向窗体中添加 ReportViewer 控件
-
在解决方案资源管理器中单击“Form1.cs”。
-
从“视图”菜单中选择“设计器”。
-
在工具箱的“数据”部分中,将 ReportViewer 控件拖动到窗体上。
-
在该窗体中单击鼠标。在“属性”窗口中,展开“Size”。根据需要设置宽度和高度属性。
-
通过单击 ReportViewer 控件右上角的三角形,打开该控件的智能标记面板。单击“选择报表”下拉列表,然后选择“Sales Orders.rdlc”。
-
在智能标记面板中,单击“在父容器中停靠”。
在本演练的剩余部分中,您可以随时生成应用程序并在窗体中查看报表。如果要查看报表设计的每次更改对最终报表的影响,可以在执行下面每个过程的最后一个步骤时都生成并查看报表。
-
(可选)按 F5 生成应用程序并在窗体中查看报表。
下图显示了当前在窗体中呈现的报表定义。您将看到一个标题行,数据表中的每一行都有一个详细信息行,报表的最后一页上显示一个页脚行,所有这些行都采用默认格式。
设置数据字段的格式
- 右击“OrderDate”字段表达式所在的单元格,然后单击“属性”。将显示“文本框属性”对话框。
- 选择“格式”选项卡,然后单击浏览(“…”)按钮打开“选择格式”对话框。
- 在“格式”框中,选择“标准”,再选择“日期”,然后选择一种日期格式。
- 单击“确定”关闭“选择格式”对话框,然后再次单击“确定”关闭“文本框属性”对话框 。
- (可选)按 F5 生成应用程序并查看报表。在本示例中,您将看到日期列已具有您刚才应用的格式。
![“选择日期格式”对话框](http://i.msdn.microsoft.com/dynimg/IC103445.gif)
- 右击 TotalSales 字段表达式所在的单元格,然后单击“属性”。
- 选择“格式”选项卡,然后单击浏览(“…”)按钮打开“选择格式”对话框。
- 在“格式”框中,选择“标准”,再选择“货币”,然后选择一种货币格式。
- 单击“确定”,然后再次单击“确定”关闭“文本框属性”对话框。
- (可选)按 F5 生成应用程序并查看报表
![“选择货币格式”对话框](http://i.msdn.microsoft.com/dynimg/IC33291.gif)
设置表格表头的格式
-
单击该表,以便在表的上方和旁边显示列句柄和行句柄。
注意
句柄是显示在表的上方和旁边的灰框。您可以使用句柄对列、行和表本身执行各种操作。穿过表顶部上下拉伸的句柄是列句柄。沿着表一侧拉伸的句柄是行句柄。列句柄和行句柄的交汇处是角部句柄。
-
选择第一行(包含列标题标签)的行句柄,然后单击“加粗”。
-
单击表的标题行,然后单击“背景色”。单击“Web”选项卡,然后选择“粉红玫瑰”。单击“确定”。
-
(可选)单击 F5 生成应用程序并查看报表。下图显示了设置了格式的报表。
为表格格式报表定义组
-
单击该表,以便在表的上方和旁边显示列句柄和行句柄。
-
右击任何行的句柄,再单击“插入组”。
-
在“常规”选项卡上的“分组方式”框中,在第一行选择 =Fields!LastName.Value,在第二行选择 =Fields!FirstName.Value。这会按销售人员的姓名对数据分组。请注意,您可以按照表数据区域中未使用但出现在“DataTable1”字段中的字段对数据分组。
按组汇总数据
-
单击组的标题行,然后单击“背景色”。选择“Web”选项卡,然后选择“浅青色”。单击“确定”。
-
将每行中重复的“TotalSales”替换为组头中汇总组数据的表达式。
-
将每行中重复的名称替换为组头中包含两行内容的表达式。第一行是名字和姓氏。第二行是非空的销售量。
-
选择“Last Name”详细信息行中的表达式,然后将其删除。
-
右击“Last Name”的组标题行,然后选择“表达式”。复制下面的文本并将其粘贴在“编辑表达式”对话框区域中。
下图显示了执行此步骤后的表达式编辑器。
-
-
(可选)按 F5 生成应用程序并查看报表。下图显示了按每个销售人员的姓名分组后的表行。每个组头汇总相应组的详细信息行,其中显示销售人员的姓名、销售量和总销售额。
对表格格式报表中的组进行排序
-
选择表数据区域并打开“表属性”。
-
单击“组”选项卡。将自动选择唯一定义的组“table1_Group1”。单��“编辑”。随即将打开“分组和排序”对话框。
验证打开的对话框是“分组和排序属性”而非“表属性”。“表属性排序”选项卡控制的是详细信息行的排序方式,而非组的排序方式。在下一过程中,您将设置详细信息行的排序。
-
单击“排序”选项卡。在“排序方式”框中的下拉列表中,选择“<表达式...>”。在“编辑表达式”框中,键入要用作排序依据的表达式。例如:
=Count(Fields!SalesOrderNumber.Value)
-
单击“确定”。
-
(可选)按 F5 生成应用程序并查看报表。现在,您的报表已按每个销售人员的销售量排序。
在表格格式报表中对组内的详细信息行进行排序
-
单击该表,以便在表的上方和旁边显示列句柄和行句柄。
-
右击角部句柄,再单击“属性”按钮。随即将打开“表属性”对话框。
注意
角部句柄是指列句柄和行句柄交汇处的句柄。
-
在“排序”选项卡上的“排序方式”框中,选择“=Fields!TotalSold.Value”。在“方向”框中,选择“降序”。这将按销售额对明细数据排序,并在第一行显示最大的值。
-
单击“确定”。
“表属性”对话框的外观应类似于下图。
-
(可选)按 F5 生成应用程序并查看报表。下图显示了所得报表的第 2 页,以演示具有多个详细信息行的组。
在表格格式报表的页脚中添加汇总数据
-
在表尾行中,选择“Sales Order”和“Total Sales”单元格。在选定的单元格中单击右键,然后选择“合并单元格”。
这将提供更多的空间来设置表中销售总和的格式。
-
在合并后的单个单元格中单击右键,然后选择“属性”。
-
在“值”下拉列表中,键入以下表达式:
=Sum(Fields!TotalSales.Value)
-
向合并后的单元格应用货币格式。
-
在合并单元格旁边的文本框单元格中单击鼠标,然后创建一个标签。例如,键入“Total Sold:”。请注意,这完全是文本,而非表达式。
-
(可选)设置页脚行的背景色,使之与标题行的背景色匹配。
下图显示了表定义。
-
(可选)按 F5 生成应用程序并查看报表。在呈现的报表中,单击报表工具栏上的“最后一页”按钮,以导航至报表的最后一页。滚动到底部,您将看到总销售额。