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

SSRS 系列第一部分:报表创建、部署和调用的各种方法

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.80/5 (70投票s)

2011 年 5 月 10 日

CPOL

16分钟阅读

viewsIcon

297661

downloadIcon

13237

本文将帮助您了解从各种客户端应用程序创建、部署和调用报表的多种方法。

SSRS 系列第一部分:报表创建、部署和调用的各种方法

目录

  1. 引言
  2. 背景
  3. 数据源
  4. 使用报表向导创建基本的表格 SSRS 报表 (下载 BasicTabularReport.zip 文件)
  5. 报表部署到报表服务器
  6. 从 Asp.net 调用已部署的报表 (下载 Asp.net_SSRS_Reports.zip 文件)
  7. 使用报表向导创建矩阵报表 (下载 MatrixReportWithWizard.zip 文件)
  8. 不使用报表向导创建矩阵报表 (下载 MatrixReprtWithoutWizard.zip 文件)
  9. 在 Windows 窗体中使用 Microsoft ReportViewer 控件创建 SSRS 报表 (下载 Winforms_Reports.zip 文件)
  10. 在 WPF 应用程序中使用 Microsoft ReportViewer 控件创建 SSRS 报表 (下载 Wpf_Reports.zip 文件)
  11. 结论

引言

在过去的几个月里,我一直在从事 SSRS 工作,并积累了一些知识,我想在此分享,特别是对于那些即将开始学习 SSRS 的人,我将提供循序渐进的方法;对于那些已经生成了一些基本的 SSRS 报表但接触不多的,也想学习更多。我将从最基本的报表生成开始,并随着时间的推移继续前进。这将是一个系列的连载文章,在每一部分中我都会介绍一些新功能。请注意,我在此文章中使用的 SQL Server 是 Denali CTP 1。

背景

SSRS 现在已成为事实上的报表工具,熟悉它已成为必需而非奢侈。我发现很多人对 BI 领域感兴趣,但由于各种原因(可能是在工作领域没有机会接触、没有时间投入、项目频繁变动等)未能有机会与之合作。因此,我开始撰写这个系列的(SSRS/SSIS/SSAS)文章,我将主要介绍我在实际项目中接触到的功能。我将努力使这个系列的文章更偏向于循序渐进的实践操作,以便人们可以通过查阅来复习/学习。毕竟,一张图胜过千言万语。

数据源

为了进行此实验,我们将使用以下脚本生成并填充名为 (tbl_Players) 的 Players 表。

-- Drop the table if it exists
IF EXISTS (SELECT * FROM sys.objects WHERE name = N'tbl_Players' AND type = 'U')
    DROP TABLE tbl_Players
GO
SET ANSI_NULLS ON
GO
--Create the table
CREATE TABLE tbl_Players (
	PlayerID INT IDENTITY,
	PlayerName VARCHAR(15),
	BelongsTo VARCHAR(15),
	MatchPlayed INT,
	RunsMade INT,
	WicketsTaken INT,
	FeePerMatch NUMERIC(16,2)
)

--Insert the records
INSERT INTO tbl_Players(PlayerName, BelongsTo, MatchPlayed,RunsMade,WicketsTaken,FeePerMatch) VALUES('A. Won','India',10,440,10, 1000000)
INSERT INTO tbl_Players(PlayerName, BelongsTo, MatchPlayed,RunsMade,WicketsTaken,FeePerMatch) VALUES('A. Cricket','India',10,50,17, 400000)
INSERT INTO tbl_Players(PlayerName, BelongsTo, MatchPlayed,RunsMade,WicketsTaken,FeePerMatch) VALUES('B. Dhanman','India',10,650,0,3600000)
INSERT INTO tbl_Players(PlayerName, BelongsTo, MatchPlayed,RunsMade,WicketsTaken,FeePerMatch) VALUES('C. Barsat','India',10,950,0,5000000)
INSERT INTO tbl_Players(PlayerName, BelongsTo, MatchPlayed,RunsMade,WicketsTaken,FeePerMatch) VALUES('A. Mirza','India',2,3,38, 3600000)

INSERT INTO tbl_Players(PlayerName, BelongsTo, MatchPlayed,RunsMade,WicketsTaken,FeePerMatch) VALUES('M. Karol','US',15,44,4, 2000000)
INSERT INTO tbl_Players(PlayerName, BelongsTo, MatchPlayed,RunsMade,WicketsTaken,FeePerMatch) VALUES('Z. Hamsa','US',3,580,0, 400)
INSERT INTO tbl_Players(PlayerName, BelongsTo, MatchPlayed,RunsMade,WicketsTaken,FeePerMatch) VALUES('K. Loly','US',6,500,12,800000)
INSERT INTO tbl_Players(PlayerName, BelongsTo, MatchPlayed,RunsMade,WicketsTaken,FeePerMatch) VALUES('S. Summer','US',87,50,8,1230000)
INSERT INTO tbl_Players(PlayerName, BelongsTo, MatchPlayed,RunsMade,WicketsTaken,FeePerMatch) VALUES('J.June','US',12,510,9, 4988000)

INSERT INTO tbl_Players(PlayerName, BelongsTo, MatchPlayed,RunsMade,WicketsTaken,FeePerMatch) VALUES('A.Namaki','Australia',1,4,180, 999999)
INSERT INTO tbl_Players(PlayerName, BelongsTo, MatchPlayed,RunsMade,WicketsTaken,FeePerMatch) VALUES('Z. Samaki','Australia',2,6,147, 888888)
INSERT INTO tbl_Players(PlayerName, BelongsTo, MatchPlayed,RunsMade,WicketsTaken,FeePerMatch) VALUES('MS. Kaki','Australia',40,66,0,1234)
INSERT INTO tbl_Players(PlayerName, BelongsTo, MatchPlayed,RunsMade,WicketsTaken,FeePerMatch) VALUES('S. Boon','Australia',170,888,10,890)
INSERT INTO tbl_Players(PlayerName, BelongsTo, MatchPlayed,RunsMade,WicketsTaken,FeePerMatch) VALUES('DC. Shane','Australia',28,39,338, 4444499)

INSERT INTO tbl_Players(PlayerName, BelongsTo, MatchPlayed,RunsMade,WicketsTaken,FeePerMatch) VALUES('S. Noami','Singapore',165,484,45, 5678)
INSERT INTO tbl_Players(PlayerName, BelongsTo, MatchPlayed,RunsMade,WicketsTaken,FeePerMatch) VALUES('Z. Biswas','Singapore',73,51,50, 22222)
INSERT INTO tbl_Players(PlayerName, BelongsTo, MatchPlayed,RunsMade,WicketsTaken,FeePerMatch) VALUES('K. Dolly','Singapore',65,59,1,99999)
INSERT INTO tbl_Players(PlayerName, BelongsTo, MatchPlayed,RunsMade,WicketsTaken,FeePerMatch) VALUES('S. Winter','Singapore',7,50,8,12)
INSERT INTO tbl_Players(PlayerName, BelongsTo, MatchPlayed,RunsMade,WicketsTaken,FeePerMatch) VALUES('J.August','Singapore',9,99,98, 890)

运行简单 Select 查询后的部分输出

 Select * from tbl_Players  
如下所示

Report_CDI/1.jpg

我们还将在数据库中创建以下存储过程,其脚本如下

If Exists (Select * from sys.objects where name = 'usp_SelectRecordsByPlayerName' and type = 'P')
    Drop Procedure usp_SelectRecordsByPlayerName
Go
-- Create the  stored procedure
Create Procedure [dbo].[usp_SelectRecordsByPlayerName]
( @PlayerID int )
As
Begin
	Select 
		PlayerID
		,PlayerName
		, BelongsTo
		, MatchPlayed
		,RunsMade
		,WicketsTaken
		,FeePerMatch
	From
	tbl_Players
	Where PlayerId = @PlayerID
End

(A) 使用报表向导创建基本的表格 SSRS 报表

步骤 1:打开 BIDS

步骤 2:从可用的项目类型中选择“报表服务器项目”,为项目命名,然后单击“确定”按钮。

Report_CDI/2.jpg

步骤 3:单击“确定”按钮后,将出现以下屏幕

Report_CDI/3.jpg

步骤 4:让我们单击“共享数据源”->“添加新数据源”

Report_CDI/4.jpg

步骤 5:让我们在“共享数据源属性”中输入正确的信息,然后单击“确定”按钮。

Report_CDI/5.jpg

步骤 6:单击“确定”按钮后,将出现以下屏幕

Report_CDI/6.jpg

步骤 7:接下来单击“报表”->“添加新报表”

Report_CDI/7.jpg

报表向导将出现如下所示

Report_CDI/8.jpg

单击“下一步”按钮后,将进入“设计查询”窗口,我们将在其中编写内联查询以从 Players 表中提取记录。

Report_CDI/9.jpg

单击“查询生成器”按钮,将打开“查询设计器”屏幕。请注意,表类型中有两个选项

  1. 文本(我们在此编写普通/内联 SQL 查询)
  2. 存储过程

Report_CDI/10.jpg

但在此示例中,我们只对内联查询感兴趣,因此我们将选择“文本”。

注意:~ 我们可以单击“导入”按钮并指定包含脚本的 SQL 文件。要指定存储过程,我们需要指定带参数名称的存储过程名称(因为我们的存储过程接受一个参数)

Report_CDI/11.jpg

现在让我们编写以下查询,然后单击“运行”图标 (!)

Select 
	PlayerID,
	PlayerName,
	BelongsTo,
	MatchPlayed,
	RunsMade,
	WicketsTaken,
	FeePerMatch
From tbl_Players

Report_CDI/12.jpg

单击“确定”按钮,让我们回到“设计查询”窗口

Report_CDI/13.jpg

单击“下一步”,然后从出现的“选择报表类型”屏幕中,让我们选择“表格”作为报表类型,然后单击“下一步”按钮。

Report_CDI/14.jpg

这将打开“设计表格”屏幕。从“可用字段”列表框中,让我们选择所有字段,然后通过单击“详细信息”按钮将它们放在“详细信息”部分的“显示字段”下。

Report_CDI/15.jpg

单击“下一步”按钮将显示“选择表格样式”屏幕,我们可以在其中选择各种表格样式。我们将在此处选择“海洋”

Report_CDI/16.jpg

单击“下一步”按钮将进入最终屏幕,我们将为报表指定一个合适的名称。

Report_CDI/17.jpg

单击“完成”。

步骤 8:报表已创建。如果我们现在查看“报表”文件夹,将生成 Player Report.rdl。

Report_CDI/18.jpg

报表设计视图是

Report_CDI/19.jpg

现在让我们单击“预览”按钮以获取完整的报表

Report_CDI/20.jpg

注意:如果我们指定了参数,那么在预览时我们需要为其提供一些值,如下所示

Report_CDI/21.jpg

到目前为止,我们已经了解了如何构建报表。现在是部署部分。

(B) 报表部署到报表服务器

报表制作完成后,接下来需要将其部署到报表服务器。为此,我们需要知道报表服务器的名称。

从“配置工具”中,我们需要选择“Reporting Services 配置管理器”

Report_CDI/22.jpg

“Reporting Services 配置管理器”窗口将打开,如下所示

Report_CDI/23.jpg

单击“连接”按钮,将显示以下屏幕

Report_CDI/24.jpg

我特意高亮显示了“报表服务器数据库名称”(即 **ReportServer$NILADRIDENALI**)。我们稍后会看到一些关于它的内容。让我们单击“报表管理器 URL”选项卡以获取报表服务器 URL。

Report_CDI/25.jpg

单击 URL,系统将要求您输入 Windows 凭据

Report_CDI/26.jpg

输入后,单击“确定”按钮,我们将看到如下屏幕

Report_CDI/27.jpg

此时,让我们查询 ReportServer$NILADRIDENALI 数据库的 Catalog 表

 Select * from dbo.Catalog 

结果如下

Report_CDI/28.jpg

我们这样做是因为当我们设计报表时,会生成报表定义语言文件(rdl)。它基本上是一个 XML 文档文件,其中包含有关我们如何设计报表的所有信息。一旦我们部署报表,rdl 文件就会被插入到报表服务器数据库中。我们可以查询 catalog 表以获取相关信息。我们将在稍后讨论这一部分。但目前,我们的报表在此数据库中不存在。

现在让我们回到我们的 SSRS 项目。右键单击 BasicSSRSReport_Part1 项目的属性菜单。

Report_CDI/29.jpg

或者,我们可以通过从“项目”选项卡中选择“属性”菜单来完成相同的操作

Report_CDI/30.jpg

在任何一种情况下,我们都将被引导到属性页面,在那里我们将输入从“Reporting Services 配置管理器”的“报表管理器 URL”获得的“目标服务器 URL”。

Report_CDI/31.jpg

在单击“确定”按钮后,让我们选择项目,右键单击并从可用上下文菜单中单击“部署”。

Report_CDI/32.jpg

如果一切顺利,我们将收到成功消息

Report_CDI/33.jpg

此时,如果使用上述相同查询来查询我们的 Catalog 表,我们将得到以下输出

Report_CDI/34.jpg

因此,我们的报表已插入到报表服务器数据库中。我们还可以发现,rdl 内容已插入到 Catalog 表的 Content 列(类型为 image)中。我们可以从这种十六进制表示形式中获取 XML 内容,然后使用 XQuery 获取有关报表的更多信息。要获取 XML 内容,我们可以执行以下查询

Select
	[Report Name] = Name,
	[Rdl Content] = CAST(CAST(Content As Varbinary(Max)) As XML) 
From Catalog
Where Type = 2

输出如下

Report_CDI/35.jpg

现在让我们从浏览器访问我们的报表。单击“报表管理器 URL”中可用的 URL,我们将看到以下内容

Report_CDI/36.jpg

现在单击 BasicSSRS_Report_Part1,它将显示可用报表列表(在本例中只有一个,即 Player Rport)。

Report_CDI/37.jpg

单击“Player Report”,我们将看到如下所示的 Player Report

Report_CDI/38.jpg

(C) 从 Asp.net 调用已部署的报表

现在报表已部署到报表服务器,我们可以通过客户端应用程序调用它。在本节中,我们将使用 Asp.net 作为客户端应用程序。我还使用了 VS2010,但这关系不大。我们可以在早期版本的 VS 中遵循相同的步骤。以下是执行此操作的步骤。

步骤 1:打开 Visual Studio。从“文件”菜单中,选择“新建”->“网站”。从可用的模板中,选择“ASP.Net 网站”。然后单击“确定”按钮。

Report_CDI/39.jpg

步骤 2:从工具箱项中,让我们将以下控件拖放到设计器布局中

  1. 一个 ScriptManager 控件(在 Ajax 扩展中可用)
  2. 一个 Button 控件(在标准部分可用)
  3. 一个 ReportViewer 控件(在报表部分可用)

html 代码如下

<body>
    <form id="form1" runat="server">
    <div>
        <asp:ScriptManager ID="ScriptManager1" runat="server" />
    </div>
    <table>
        <tr>
            <td>
                <asp:Button ID="btnShowReport" runat="server" Text="Display Report" Font-Bold="True" />
            </td>
        </tr>
        <tr>
            <td>
                <rsweb:ReportViewer ID="repViewer" runat="server" Width="1044px" Height="488px" />
            </td>
        </tr>
    </table>
    </form>
</body>

设计看起来如下

Report_CDI/40.jpg

步骤 3:现在让我们双击按钮,并在按钮单击事件的代码隐藏中添加以下代码

try
{
    repViewer.ProcessingMode = Microsoft.Reporting.WebForms.ProcessingMode.Remote;
    repViewer.ServerReport.ReportServerUrl = new Uri("http://niladri-pc/ReportServer_NILADRIDENALI");
    repViewer.ServerReport.ReportPath = "/BasicSSRSReport_Part1/Player Report";
    repViewer.ServerReport.Refresh();
}
catch (Exception ex)
{
    throw ex;
}

我们的 player 报表位于服务器上的 **BasicSSRSReport_Part1/Player Report** 路径中。在单击 Reporting Services Configuration Manager 的 Report Manager URL 中的 URL 后,我们可以获得此信息。

首先,我们将看到一个屏幕,其中显示了根目录,即此处的 **BasicSSRSReport_Part1**。

Report_CDI/41.jpg

单击 BasicSSRS_Report_Part1 目录链接后,我们将看到 Player Report 文件夹

Report_CDI/42.jpg

总之,现在运行应用程序,并在单击“显示报表”按钮时,我们将获得如下所示的报表

Report_CDI/43.jpg

因此,在本节中,我们学习了如何通过客户端应用程序调用部署在服务器上的报表。

附注 ~ 我们这里看到的示例是不带参数的,即我们的报表不接受任何参数。但实际上,它会接受参数。让我们对原始报表做一个小小的更改。让我们在查询设计器中编写以下查询

Select 
	PlayerID
	,PlayerName,
	BelongsTo
	,MatchPlayed,
	RunsMade
	,WicketsTaken
	,FeePerMatch
From tbl_Players
Where PlayerID = @PlayerID

可以使用存储过程来完成。我们在“使用报表向导创建基本的表格 SSRS 报表”部分已经看到了这一点。

其他内容将保持不变。运行报表时,它会要求提供 PlayerID 参数;提供参数后,报表将生成。并且它已添加到数据集属性中。让我们看看下面的图,它将给出真实的情况

Report_CDI/44.jpg

可以看出,我们已经打开了数据集属性,然后从那里访问了“参数”部分。在那里,我们指定了参数名称(即 **@PlayerID**),并在表达式中指定了值 **=Parameters!PlayerID.Value**。就这样。

并在按钮单击事件中添加以下代码

try
{
	ReportParameter[] repParams = new ReportParameter[1];
	repParams[0] = new ReportParameter("PlayerID", "10");
	repViewer.ProcessingMode = Microsoft.Reporting.WebForms.ProcessingMode.Remote;
	repViewer.ServerReport.ReportServerUrl = new Uri("http://niladri-pc/ReportServer_NILADRIDENALI");
	repViewer.ServerReport.ReportPath = "/BasicSSRSReport_Part1/Player Report";
	repViewer.ServerReport.SetParameters(repParams);
	repViewer.ServerReport.Refresh();
}
catch (Exception ex)
{
	throw ex;
}

当然,我们需要添加命名空间 **Microsoft.Reporting.WebForms**

(D) 使用报表向导创建矩阵报表

在本节中,我们将介绍创建矩阵报表的步骤,它主要用于生成透视表样式的报表。创建此类报表的步骤与我们已经探索过的表格报表非常相似,只是有一个细微的差别。因此,我们不重复创建表格报表时遵循的相同步骤,而是只从需要设置矩阵报表类型的那一点开始前进。我们将从“选择报表类型”屏幕开始。请遵循“使用报表向导创建基本的表格 SSRS 报表”部分提供的步骤来设置之前的步骤。

步骤 1:让我们选择“矩阵”作为报表类型,然后单击“下一步”按钮。

Report_CDI/45.jpg

这将打开“设计表格”屏幕。假设我们想知道属于哪个国家的玩家每场比赛支付多少费用。基本上,我们想在报表列/标题中看到 **BelongsTo 字段**,在行中看到 **PlayerName 字段**,并在详细信息部分看到 **FeePerMatch 字段**

Report_CDI/46.jpg

单击“下一步”按钮将显示“选择表格样式”屏幕,我们可以在其中选择各种表格样式。我们将在此处选择“森林”

Report_CDI/47.jpg

单击“下一步”按钮将进入最终屏幕,我们将为报表指定一个合适的名称。

Report_CDI/48.jpg

单击“完成”。

步骤 2:运行报表或单击预览按钮,结果如下

Report_CDI/49.jpg

(E) 不使用报表向导创建矩阵报表

到目前为止,我们已经通过报表向导看到了表格报表和矩阵报表的生成。现在我们将探讨如何在没有向导的情况下创建它们。基本上,我们将创建一个相同的矩阵报表,而不使用向导。

让我们看看如何做到这一点。

步骤 1:打开 BIDS

步骤 2:从可用的项目类型中选择“报表服务器项目”,为项目命名,然后单击“确定”按钮。

Report_CDI/50.jpg

步骤 3:单击“确定”按钮后,将出现以下屏幕

Report_CDI/51.jpg

步骤 4:让我们单击“共享数据源”->“添加新数据源”

步骤 5:让我们在“共享数据源属性”中输入正确的信息,然后单击“确定”按钮。

Report_CDI/52.jpg

步骤 6:单击“确定”按钮后,将出现以下屏幕

Report_CDI/53.jpg

步骤 7:单击“报表”文件夹 ->“添加”->“新项”

Report_CDI/54.jpg

步骤 8:在“报表”项目类别中选择“报表”,然后输入一个合适的名称。单击“添加”按钮。

Report_CDI/55.jpg

步骤 9:之后,我们将看到以下设计器

Report_CDI/56.jpg

从“报表项”工具箱中,我们将拖放“矩阵”控件。在此过程中,将出现“数据集属性”窗口。选择“使用嵌入在我报表中的数据集”选项。

Report_CDI/57.jpg

单击“新建”按钮。在“数据源属性”窗口中,选择“使用数据集引用”选项。最后单击“确定”。

Report_CDI/58.jpg

现在,在“数据集属性”窗口中,让我们在查询设计器中添加以下查询,并通过单击执行按钮 (!) 来运行它,以确保查询正常工作。

SELECT 
      [PlayerName]
      ,[BelongsTo]      
      ,[FeePerMatch]
 FROM [SSRSExperiment].[dbo].[tbl_Players]

“数据集属性”窗口现在将如下所示

Report_CDI/59.jpg

步骤 10:现在,从可用的数据集中,我们将填写矩阵的行、列和数据部分,并进行一些自定义,例如添加行标题、使列变粗等。

Report_CDI/60.jpg

预览后,我们将获得矩阵报表

Report_CDI/61.jpg

注意:与矩阵报表类似,表格报表也可以用同样的方式创建,在这种情况下,我们必须使用表格控件而不是矩阵控件。

(F) 在 Windows 窗体中使用 Microsoft ReportViewer 控件创建 SSRS 报表

我们已经了解了如何使用报表设计器创建报表以及如何在不使用报表设计器的情况下创建报表。现在我们将深入探讨如何在 Windows 窗体中使用 **Microsoft Report Viewer 控件** 创建报表。嗯,上述方法也可用于在 Windows 应用程序中进行报表制作,但本节将更侧重于 Report Viewer 控件的用法。

在本演示中,我们将使用在数据源部分已描述过的存储过程 **usp_SelectRecordsByPlayerName**。

步骤 1:打开 VS 2010 并创建一个 Windows 应用程序。

Report_CDI/62.jpg

步骤 2:接下来,让我们单击“添加”->“新项目”菜单

Report_CDI/63.jpg

步骤 3:从可用模板列表中,让我们选择“数据集”并将其命名为 **“PlayerDataset”**

Report_CDI/64.jpg

步骤 4:接下来,让我们单击“视图”菜单中的“服务器资源管理器”。并按照下图所示添加新的数据连接。

Report_CDI/65.jpg

步骤 5:选择 SQL Server 连接、服务器名称、数据库名称,然后按“测试连接”按钮。成功后,单击“确定”按钮

Report_CDI/66.jpg

步骤 6:现在展开“存储过程”选项卡,选择存储过程 **usp_SelectRecordsByPlayerName**,然后将其拖放到 Player Dataset 设计图面上。

Report_CDI/67.jpg

步骤 7:接下来,让我们单击“添加”->“新项目”菜单。从可用模板列表中,让我们选择“报表”并将其命名为 **“PlayerReport.rdlc”**

Report_CDI/68.jpg

步骤 8:从“报表项”工具箱中,将 **TABLE 项** 拖放到报表窗体上。在此过程中,我们需要在“数据集属性”窗口中指定数据源,在此处为 PlayerDataSet。

Report_CDI/69.jpg

设置完“数据集属性”后,表格将添加到报表窗体中

Report_CDI/70.jpg

步骤 9:接下来,从 PlayerDataset 中,我们将把我们真正感兴趣的字段名添加到报表窗体中。

Report_CDI/71.jpg

步骤 10:让我们创建一个 Windows 窗体,例如 DisplayPlayerReport,并向其中添加以下控件

控件类型 控件 ID 控件显示文本
Label lblPlayerID 请输入 Player ID
文本框 txtPlayerID
Button btnGenerateReport 生成报表
报表查看器 rvPlayer

单击 ReportViewer 控件右上角的 |> 符号,然后选择报表文件

Report_CDI/72.jpg

步骤 11:在“生成报表”按钮单击事件中,添加以下代码

private void btnGenerateReport_Click(object sender, EventArgs e)
{
    this.usp_SelectRecordsByPlayerNameTableAdapter.Fill
(this.PlayerDataSet.usp_SelectRecordsByPlayerName,Convert.ToInt32(txtPlayerID.Text));

    this.rvPlayer.RefreshReport();
 }

步骤 12:运行应用程序。输入 PlayerId,然后单击“生成报表”按钮,将获得如下输出。

Report_CDI/73.jpg

附注 ~ 虽然在本例中我们看到了如何调用本地报表,但我们可以像为 Asp.net 应用程序示例那样,以相同的方式调用已部署在服务器上的报表。在接下来的主题中,我们将研究如何通过 WPF 调用报表。

(G) 在 WPF 应用程序中使用 Microsoft ReportViewer 控件创建 SSRS 报表

步骤 1:创建一个 WPF 项目,并添加对 **Microsoft.ReportViewer.WinForms** 程序集的引用。

Report_CDI/74.jpg

步骤 2:在 xaml 中添加 clr 命名空间,例如 **clr-namespace:Microsoft.Reporting.WinForms;assembly=Microsoft.ReportViewer.WinForms**,然后添加一个按钮控件和一个 WindowsFormsHost 控件。在 WindowsFormsHost 控件内部,让我们添加 Microsoft ReportViewer 控件。

xaml 代码如下

<Window x:Class="WpfReport.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:rv="clr-namespace:Microsoft.Reporting.WinForms;assembly=Microsoft.ReportViewer.WinForms" 
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Button Content="Display Report" Height="23" HorizontalAlignment="Left" Margin="17,17,0,0" Name="btnDisplayReport" VerticalAlignment="Top" Width="103" />
        <WindowsFormsHost Height="215" HorizontalAlignment="Left" Margin="25,67,0,0" Name="winFormHost" 
                          VerticalAlignment="Top" Width="466">
            <rv:ReportViewer x:Name="repViewer"/>            
        </WindowsFormsHost>
    </Grid>
</Window>

设计视图如下所示

Report_CDI/75.jpg

步骤 3:在按钮单击事件中,让我们编写以下代码

try
{
	repViewer.ProcessingMode = Microsoft.Reporting.WinForms.ProcessingMode.Remote;
	repViewer.ServerReport.ReportServerUrl = new Uri("http://niladri-pc/ReportServer_NILADRIDENALI");
	repViewer.ServerReport.ReportPath = "/BasicSSRSReport_Part1/Player Report";
	repViewer.ServerReport.Refresh();
}
catch (Exception ex)
{
	throw ex;
}

就这样。运行报表,我们将获得所需的输出

结论

希望这篇文章对那些想开始学习 SSRS 的人以及那些想重温他们长时间未接触的报表主题的人有所帮助。但这并非结束。这只是关于我们可以创建报表的各种方法、如何部署它们、如何使用参数化报表、在报表中使用存储过程、如何从各种客户端应用程序(如 Asp.net、WPF、Windows 窗体等)调用报表。我们还学习了 Report Viewer 控件的用法等。在下一篇文章中,我们将使用更多实际示例来探讨 SSRS 的其他精彩方面,例如表达式、数据条、指示器等。分享您对本文的看法,如果您错过了其他报表创建方法,请告诉我。

感谢阅读本文。

© . All rights reserved.