在那个项目过后,我尝试使用了很多种报表工具,但都觉得不是很能满足我们的要求。我们也曾经想过自己实现一种报表工具,但出于人手、时间、和经费、可行性的考虑最终还是打消了这个念头。这个时候微软发布了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.
很抱歉都个小懒,我的表只有两个字段一个填充方法。
我们在创建一个类用作对象数据源,很高兴微软报表支持一个报表内使用不同的数据源。下面是我的:
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的报表文件。
我有点迫不及待了,才到这里。下面是我的界面
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>
|
现在你将得到以下的画面:
接下来,你可以*设计你的报表了,下面是我的。
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控件)
好了,好像写了好多,但是其实操作很简单,也没有多少难度,只是让大家对微软报表有一个基本的概念。本来来打算在讲一点功能介绍呢,就留到下一节吧。
附带的原代码中不包含,win和wpf的代码,(win要比web简单些)如果你需要也可以回复向我索取,或者在下一节下载代码。我计划在这个可能结束的时候将代码发布为一个小的开源项目。
编码愉快!!下次见。