本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表部分内容如下:
从表的内容中,我们可以大致判断出其结构是什么样的啦。
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使用手册”下载。