Visual Studio2010 Microsoft 报表 #1 Visual Studio2010 Microsoft 报表 #1

 http://www.cnblogs.com/lauyee/archive/2010/07/26/1783694.html

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

      
      在那个项目过后,我尝试使用了很多种报表工具,但都觉得不是很能满足我们的要求。我们也曾经想过自己实现一种报表工具,但出于人手、时间、和经费、可行性的考虑最终还是打消了这个念头。这个时候微软发布了SQL Server 2008 R2,它另我为异常兴奋。这正是我们做要寻找的工具。但是很遗憾

 

 

         Visual Studio2010 Microsoft 报表 #1
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
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

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

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
Visual Studio2010 Microsoft 报表 #1

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

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

      

       编码愉快!!下次见。

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

      
      在那个项目过后,我尝试使用了很多种报表工具,但都觉得不是很能满足我们的要求。我们也曾经想过自己实现一种报表工具,但出于人手、时间、和经费、可行性的考虑最终还是打消了这个念头。这个时候微软发布了SQL Server 2008 R2,它另我为异常兴奋。这正是我们做要寻找的工具。但是很遗憾

 

 

         Visual Studio2010 Microsoft 报表 #1
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
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

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

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
Visual Studio2010 Microsoft 报表 #1

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

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

      

       编码愉快!!下次见。