本Demo在主报表会显示一个部门列表(部门ID、部门名称等),然后通过钻取功能可实现特定部门的员工信息展示,下述为具体操作步骤。
1) 准备好两个数据源,本文为2个xml文件(departments.xml和Employees.xml),这两个文件放在项目的Data文件夹下,特别注意的是这两个文件的【复制到输出目录】属性要选择“始终复制”,负责工程编译的时候不会将这两个文件生成到bin目录下。
2) 新建报表,命名为“drillthrough.rdlc”;新建一个数据集,命名为“departments”,在该数据集中添加一个Datatable,表结构如下:
DepartmentID Int32
Name String
GroupName String
ModifiedDate DateTime
rowguid String
3) 在drillthrough.rdlc设计器中,拖入一个文本框和一个Table控件。文本框显示内容为“Drill Through Demo”,在Table控件中拖入DepartmentID和Name两列。
4) 添加Name列的导航、钻取功能。右击Name文本框,选择【属性】,选择【导航】Tab页,在“超级链接”处选择“跳至报表”(该报表为显示钻取实现的目标报表,假设为drillthroughDetail.rdlc,且已经存在,因此在实践时,可以再本操作之前,先创建一个drillthroughDetail.rdlc报表),设置“跳至报表”为drillthroughDetail,点击【参数】按钮,会弹出参数设置对话框。在对话框中,添加一个参数,名称为DepartmentID,值为=Fields!DepartmentID.Value;
5) 设计drillthroughDetail.rdlc报表,先新建一个该报表对应的数据集,名称为employees,添加一个DataTable,名称为employee,employee表部分内容如下:
<table>
<EmployeeID>1</EmployeeID>
<FirstName>Terri</FirstName>
<AddressID>1</AddressID>
<ShiftID>1</ShiftID>
<LastName>Duffy</LastName>
<MiddleName>Lee</MiddleName>
<NameStyle>false</NameStyle>
<NationalIDNumber>245797967</NationalIDNumber>
<Title>VP Engineering</Title>
<HireDate>1998-03-03T00:00:00.0000000-08:00</HireDate>
<BirthDate>1961-09-01T00:00:00.0000000-07:00</BirthDate>
<LoginID>adventure-works/Terri</LoginID>
<EmailAddress>Terri@adventure-works.com</EmailAddress>
<DepartmentID>1</DepartmentID>
<MaritalStatus>S</MaritalStatus>
<EmergencyContactName>Tad Orman</EmergencyContactName>
<EmergencyContactPhone>586-883-8338</EmergencyContactPhone>
<SalariedFlag>true</SalariedFlag>
<Gender>F</Gender>
<ManagerID>300</ManagerID>
<PayFrequency>2</PayFrequency>
<BaseRate>63.4615</BaseRate>
<VacationHours>1</VacationHours>
<SickLeaveHours>20</SickLeaveHours>
<SalesPersonFlag>false</SalesPersonFlag>
<CurrentFlag>true</CurrentFlag>
<ModifiedDate>2003-01-15T19:26:13.9000000-08:00</ModifiedDate>
<rowguid>1b76e019-0d60-4d48-b405-c9144fb9b3ab</rowguid>
</table>
从表的内容中,我们可以大致判断出其结构是什么样的啦。
6) 拖入一个文本框控件和表格控件到drillthroughDetail.rdlc报表设计器中,并从employees数据集中拖入相应字段到表格控件中,设置完毕之后,效果如下图所示。
7) 设置drillthroughDetail.rdlc报表的参数:参数名称为DepartmentID,类型为Integer;
8) 设置drillthroughDetail.rdlc报表表格控件的筛选器,表达式为=CInt(Fields!DepartmentID.Value),运算符为=,值为=Parameters!DepartmentID.Value。
9) 新建一个窗体FrmDrillThrough,添加一个ReportViewer控件,在代码编辑窗口,添加下述代码:
private void FrmDrillThrough_Load(object sender, EventArgs e)
{
reportViewer1.ProcessingMode = ProcessingMode.Local;
reportViewer1.LocalReport.ReportPath = @"Rdlc/drillthrough.rdlc";
reportViewer1.LocalReport.DataSources.Add(new ReportDataSource("departments_department", LoadData(@"Data/departments.xml")));
reportViewer1.RefreshReport();
}
//读取XML数据
private DataTable LoadData(string xmlFilePath)
{
DataSet dataSet = new DataSet();
dataSet.ReadXml(xmlFilePath);
return dataSet.Tables[0];
}
private void reportViewer1_Drillthrough(object sender, DrillthroughEventArgs e)
{
LocalReport localReport = (LocalReport)e.Report;
localReport.DataSources.Add(new ReportDataSource("employees_employee", LoadData(@"Data/Employees.xml")));
}
鼠标移到Name一列,会变成手的形状,如单击Engineering,就会钻取取来Engineering部门的员工信息,如下图所示。
因为不知道如何在博文中上传附件,相关资料已经上传到CSDN,大家可以搜索“RDLC使用手册”下载。