Visual Studio2010 Microsoft 报表 #1

时间:2022-05-22 21:06:31
 (转载)前段时间我负责的一个项目中因为报表的缘故让项目整整延期了3个月。虽然也有客户方的原因,而我们公司的领导也能体谅到项目组的难处。但是终究还是被扣掉了一些项目奖金。客户的报表太过重于格式了,这一点客户方也没有办法,因为他们的表格样式是集团公司指定好的,不能随意更改。我们的客户大多来自于有国企性质的公司。所以为了以后项目的快速实施,必须找到一种方便,快捷,最重要能满足需求的报表工具。


在那个项目过后,我尝试使用了很多种报表工具,但都觉得不是很能满足我们的要求。我们也曾经想过自己实现一种报表工具,但出于人手、时间、和经费、可行性的考虑最终还是打消了这个念头。这个时候微软发布了SQL Server 2008 R2,它另我为异常兴奋。这正是我们做要寻找的工具。但是很遗憾Visual Studio 2008 的本地报表并不支持SQL Server 2008 R2的报表格式。(关于本地报表和服务器报表以及RDL和RDLC之间的互相转换下次再讲)由于我们的客户大多使用Oracle服务器,所以不能使用SQL Server报表服务,所以直到VS2010的正式发布,我们才能真正将这个非常好用的工具用于实际的项目之中。

本页里我将和大家分享一下VS2010 ReprotViewer所能够实现的功能,并以一个快速的实例让朋友们能够快速的上手。

本文中的源代码下载,可以配合下面的step by step使用,如果你习惯阅读,那么可以不用看下面的部分。也节省不少时间。

如果你之前使用过水晶报表或类似工具可能会对理解次文很有帮助。但是我猜想,即使之前你没有有过报表工具也会很容易的上手使用微软报表。你可以单纯的把微软报表工具当成是一个普通的控件使用。可以使用在asp.net项目中,winforms项目中,和wpf项目中。让我们来以一个实际的例子来熟悉一下他的使用。(使用VS2010)

1、创建一个asp.net 空 Web 应用程序。(当然你喜欢也可以创建网站、Windows窗体应用程序、WPF应用程序。本文以Web项目为例,再附带的源代码中你可以找到Winform和wpf的例子)

2、添加一个aspx页面。

3、在工具栏-报表选项卡找到ReportViewer控件拖到页面中,并调整控件的大小。

4、组织一个数据源。

你可以使用你程序里现有的数据源,也可以直接用类型化的DataSet来连接数据库得到。这里我们使用2这两种方法分别做演示,如果你想使用EF或其他形式的数据源我们以后再做介绍。

1)选择添加-新建项,创建一个数据集,我们为改名,就使用默认的名称DataSet1.xsd。

2)使用TableAdapter 配置向导向DataSet1.xsd中添加一个DataTable.(选择一个你数据库中已有的表)下面是我创建的一个DataTable.

Visual Studio2010 Microsoft 报表 #1很抱歉都个小懒,我的表只有两个字段一个填充方法。

我们在创建一个类用作对象数据源,很高兴微软报表支持一个报表内使用不同的数据源。下面是我的:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
namespace RdlcReports.Model
{
public class info
{
public string Author { get; set; }
public string Blog { get; set; }
public string Email { get; set; }
public info(string author, string blog, string Email)
{
this.Author = author;
this.Blog = blog;
this.Email = Email;
}
public info()
{
}
public List<INFO></INFO><INFO></INFO><INFO></INFO><INFO></INFO><INFO></INFO><INFO></INFO><INFO></INFO><INFO></INFO><INFO></INFO><INFO></INFO><INFO></INFO><INFO></INFO><INFO></INFO><INFO></INFO><INFO></INFO><INFO></INFO><INFO></INFO><INFO></INFO><INFO></INFO><INFO></INFO><INFO></INFO><INFO></INFO><INFO></INFO><INFO></INFO><INFO></INFO><INFO></INFO><INFO></INFO><INFO></INFO><INFO></INFO><INFO></INFO><INFO></INFO><INFO></INFO> Getinfo()
{
List<INFO></INFO><INFO></INFO><INFO></INFO><INFO></INFO><INFO></INFO><INFO></INFO><INFO></INFO><INFO></INFO><INFO></INFO><INFO></INFO><INFO></INFO><INFO></INFO><INFO></INFO><INFO></INFO><INFO></INFO><INFO></INFO><INFO></INFO><INFO></INFO><INFO></INFO><INFO></INFO><INFO></INFO><INFO></INFO><INFO></INFO><INFO></INFO><INFO></INFO><INFO></INFO><INFO></INFO><INFO></INFO><INFO></INFO><INFO></INFO><INFO></INFO><INFO></INFO> objdata = new List<INFO></INFO><INFO></INFO><INFO></INFO><INFO></INFO><INFO></INFO><INFO></INFO><INFO></INFO><INFO></INFO><INFO></INFO><INFO></INFO><INFO></INFO><INFO></INFO><INFO></INFO><INFO></INFO><INFO></INFO><INFO></INFO><INFO></INFO><INFO></INFO><INFO></INFO><INFO></INFO><INFO></INFO><INFO></INFO><INFO></INFO><INFO></INFO><INFO></INFO><INFO></INFO><INFO></INFO><INFO></INFO><INFO></INFO><INFO></INFO><INFO></INFO><INFO></INFO>();
objdata.Add(new info("junior lau", "www.cnblogs.com", "Email:Lauyee@foxmail.com"));
return objdata;
}
}
}

5、接下来我们创建一个报表文件。选择添加-新建项-报表。我这里创建了一个名为Report1.rdlc的报表文件。

我有点迫不及待了,才到这里。下面是我的界面

Visual Studio2010 Microsoft 报表 #1

6、点击报表数据-新建-数据集,选择一个数据源。这时候我们可以把刚才创建的Dataset1的计划表添加到报表的数据源中。

1)你可以直接向上面那样用设计器添加一个类型化的DataSet到报表的数据源,但是我发现在Web项目中没有可以让你选择的可视化的操作。如果你使用WinForm做这个练习,很幸运设计器强帮你完成一切。

2)如果你想使用对象数据源,如用上面所创建的info类作为数据源,可以直接修改.rdlc源代码(用右键Report1.rdlc选择打开方式--XML(文本)编辑器要比直接右击-查看代码好一点)

将下面代码拷贝到 <DataSources></DataSources>标签之间

?
1
2
3
4
5
6
7
<DataSource Name="RdlcReportsModel">
<ConnectionProperties>
<DataProvider>System.Data.DataSet</DataProvider>
<ConnectString>/* Local Connection */</ConnectString>
</ConnectionProperties>
<rd:DataSourceID>bf49000a-37a9-4c7a-ae02-33575f080028</rd:DataSourceID>
</DataSource>

将下面代码拷贝到<DataSets></DataSets>之间

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<DataSet Name="DataSet2">
<Fields>
<Field Name="Author">
<DataField>Author</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
<Field Name="Blog">
<DataField>Blog</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
<Field Name="Email">
<DataField>Email</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
</Fields>
<Query>
<DataSourceName>RdlcReportsModel</DataSourceName>
<CommandText>/* Local Query */</CommandText>
</Query>
<rd:DataSetInfo>
<rd:DataSetName>RdlcReports.Model</rd:DataSetName>
<rd:TableName>info</rd:TableName>
<rd:ObjectDataSourceType>RdlcReports.Model.info, RdlcReports.Model, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</rd:ObjectDataSourceType>
</rd:DataSetInfo>
</DataSet>

现在你将得到以下的画面:

Visual Studio2010 Microsoft 报表 #1

接下来,你可以*设计你的报表了,下面是我的。

Visual Studio2010 Microsoft 报表 #1

7、下来开始完成aspx页面。就是拖ReportViewer控件,更改其属性让其指向.rdlc文件。直接贴代码了。忘了一点页面上需要一个ScriptManager控件。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<body>
<form id="form1" runat="server">
<div>
<rsweb:ReportViewer ID="ReportViewer1" runat="server" Font-Names="Verdana"
Font-Size="8pt" Height="414px" InteractiveDeviceInfos="(集合)"
WaitMessageFont-Names="Verdana" WaitMessageFont-Size="14pt" Width="716px">
<LocalReport ReportPath="Report1.rdlc">
<DataSources>
<rsweb:ReportDataSource DataSourceId="ObjectDataSource1" Name="DataSet1" />
<rsweb:ReportDataSource DataSourceId="ObjectDataSource2" Name="DataSet2" />
</DataSources>
</LocalReport>
</rsweb:ReportViewer>
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server"
SelectMethod="GetData"
TypeName="RdlcReports.Web.DataSet1TableAdapters.计划TableAdapter">
</asp:ObjectDataSource>
<asp:ObjectDataSource ID="ObjectDataSource2" runat="server"
SelectMethod="Getinfo"
TypeName="RdlcReports.Model.info">
</asp:ObjectDataSource>
</div>
</form>
</body>

后台没有写一句话,现在运行程序,就会出现以下的话面。(附带的原代码包含了一种,用代码在后台绑定的模式,而不是在页面使用ObjectDataSource控件)

Visual Studio2010 Microsoft 报表 #1

好了,好像写了好多,但是其实操作很简单,也没有多少难度,只是让大家对微软报表有一个基本的概念。本来来打算在讲一点功能介绍呢,就留到下一节吧。

附带的原代码中不包含,win和wpf的代码,(win要比web简单些)如果你需要也可以回复向我索取,或者在下一节下载代码。我计划在这个可能结束的时候将代码发布为一个小的开源项目。

编码愉快!!下次见。