1、创建一个asp.net 空 Web 应用程序。(当然你喜欢也可以创建网站、Windows窗体应用程序、WPF应用程序。本文以Web项目为例,再附带的源代码中你可以找到Winform和wpf的例子)
2、新建文件夹common添加一个aspx页面。
3、在工具栏-报表选项卡找到ReportViewer控件拖到页面中,并调整控件的大小。
4、组织一个数据源。在新建文件夹DataEntity里添加一个数据源
你可以使用你程序里现有的数据源,也可以直接用类型化的DataSet来连接数据库得到。这里我们使用2这两种方法分别做演示,如果你想使用EF或其他形式的数据源我们以后再做介绍。
1)选择添加-新建项,创建一个数据集,我们为改名,就使用默认的名称DataSet1.xsd。
2)使用TableAdapter 配置向导向DataSet1.xsd中添加一个DataTable.(选择一个你数据库中已有的表)下面是我创建的一个DataTable.
5、接下来我们创建一个报表文件。选择添加-新建项-报表。新建文件夹ReprotTemplate里新建 DistributionReport.rdlc
1)你可以直接向上面那样用设计器添加一个类型化的DataSet到报表的数据源,但是我发现在Web项目中没有可以让你选择的可视化的操作。如果你使用WinForm做这个练习,很幸运设计器强帮你完成一切。
2)如果你想使用对象数据源,可以直接修改.rdlc源代码(用右键Report1.rdlc选择打开方式--XML(文本)编辑器要比直接右击-查看代码好一点)
将下面代码DataSource Name=“DistributionDataSet” 改为指定的数据源
<DataSource Name="DistributionDataSet">
接着将<DataSet Name="DataSet1"> 、<DataSourceName>DistributionDataSet</DataSourceName>、
<rd:DataSetName>Efruit_CN_SHDataSet</rd:DataSetName>
、<rd:SchemaPath>E:\lixuehuaDEMO\YGReport\YGReport\Efruit_CN_SHDataSet.xsd</rd:SchemaPath>
改为制定的数据源名称 DistributionDataSet
<DataSet Name="DistributionDataSet"> 、<DataSourceName>DistributionDataSet</DataSourceName>、
<rd:DataSetName>Efruit_CN_SHDataSet</rd:DataSetName>
、<rd:SchemaPath>E:\lixuehuaDEMO\YGReport\YGReport\DataEntity\DistributionDataSet.xsd</rd:SchemaPath>
<DataSets>
<DataSet Name="DataSet1">
<Fields>
<Field Name="AreaId">
<DataField>AreaId</DataField>
<rd:TypeName>System.Guid</rd:TypeName>
</Field>
<Field Name="AreaName">
<DataField>AreaName</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
<Field Name="Grade">
<DataField>Grade</DataField>
<rd:TypeName>System.Int32</rd:TypeName>
</Field>
<Field Name="PriorId">
<DataField>PriorId</DataField>
<rd:TypeName>System.Guid</rd:TypeName>
</Field>
<Field Name="IsLowest">
<DataField>IsLowest</DataField>
<rd:TypeName>System.Int32</rd:TypeName>
</Field>
<Field Name="HighId">
<DataField>HighId</DataField>
<rd:TypeName>System.Guid</rd:TypeName>
</Field>
<Field Name="Disabled">
<DataField>Disabled</DataField>
<rd:TypeName>System.Int32</rd:TypeName>
</Field>
<Field Name="REC_CreateTime">
<DataField>REC_CreateTime</DataField>
<rd:TypeName>System.DateTime</rd:TypeName>
</Field>
<Field Name="REC_CreateBy">
<DataField>REC_CreateBy</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
<Field Name="REC_ModifyTime">
<DataField>REC_ModifyTime</DataField>
<rd:TypeName>System.DateTime</rd:TypeName>
</Field>
<Field Name="REC_ModifyBy">
<DataField>REC_ModifyBy</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
</Fields>
<Query>
<DataSourceName>DistributionDataSet</DataSourceName>
<CommandText>/* Local Query */</CommandText>
</Query>
<rd:DataSetInfo>
<rd:DataSetName>Efruit_CN_SHDataSet</rd:DataSetName>
<rd:SchemaPath>E:\lixuehuaDEMO\YGReport\YGReport\Efruit_CN_SHDataSet.xsd</rd:SchemaPath>
<rd:TableName>Dim_Area</rd:TableName>
<rd:TableAdapterFillMethod>Fill</rd:TableAdapterFillMethod>
<rd:TableAdapterGetDataMethod>GetData</rd:TableAdapterGetDataMethod>
<rd:TableAdapterName>Dim_AreaTableAdapter</rd:TableAdapterName>
</rd:DataSetInfo>
</DataSet>
</DataSets>
在aspx页面cs文件里写的代码
YGReport.DataEntity.DistributionDataSet.Fct_OrderDataTable dataTable = new DataEntity.DistributionDataSet.Fct_OrderDataTable();
YGReport.DataEntity.DistributionDataSetTableAdapters.Fct_OrderTableAdapter dapter = new DataEntity.DistributionDataSetTableAdapters.Fct_OrderTableAdapter();
dataTable = dapter.GetData();
//YGReport.Efruit_CN_SHDataSet.Fct_OrderDataTable dataTable = new Efruit_CN_SHDataSet.Fct_OrderDataTable();
//YGReport.Efruit_CN_SHDataSetTableAdapters.Fct_OrderTableAdapter dapter = new Efruit_CN_SHDataSetTableAdapters.Fct_OrderTableAdapter();
//dataTable = dapter.GetData();
ReportDataSource rds = new ReportDataSource("DistributionDataSet", dataTable.DefaultView);
// DataSet1_Customers为之前添加的数据集以及对应的数据包,dt就是我们自定义的数据源
ReportViewer1.LocalReport.ReportPath = "E:/lixuehuaDEMO/YGReport/YGReport/ReprotTemplate/DistributionReport.rdlc";
//此处就是对应要关联的报表,当然在前台设计的时候也可以直接选择
ReportViewer1.LocalReport.DataSources.Clear();
ReportViewer1.LocalReport.DataSources.Add(rds);
ReportViewer1.LocalReport.Refresh();
m_currentPageIndex = 0;