Visual Studio2010 Microsoft 报表 #1
前段时间我负责的一个项目中因为报表的缘故让项目整整延期了3个月。虽然也有客户方的原因,而我们公司的领导也能体谅到项目组的难处。但是终究还是被扣掉了一些项目奖金。客户的报表太过重于格式了,这一点客户方也没有办法,因为他们的表格样式是集团公司指定好的,不能随意更改。我们的客户大多来自于有国企性质的公司。所以为了以后项目的快速实施,必须找到一种方便,快捷,最重要能满足需求的报表工具。
在那个项目过后,我尝试使用了很多种报表工具,但都觉得不是很能满足我们的要求。我们也曾经想过自己实现一种报表工具,但出于人手、时间、和经费、可行性的考虑最终还是打消了这个念头。这个时候微软发布了SQL Server 2008 R2,它另我为异常兴奋。这正是我们做要寻找的工具。但是很遗憾
很抱歉都个小懒,我的表只有两个字段一个填充方法。
我们在创建一个类用作对象数据源,很高兴微软报表支持一个报表内使用不同的数据源。下面是我的:
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简单些)如果你需要也可以回复向我索取,或者在下一节下载代码。我计划在这个可能结束的时候将代码发布为一个小的开源项目。
编码愉快!!下次见。