[原创]Devexpress XtraReports 系列 7 创建Drill-Down(向下钻取)报表
昨天发表了Devexpress XtraReports系列第六篇[原创]Devexpress XtraReports 系列 6 创建并排报表,今天我们继续。
今天的主题是创建Drill-Down报表。
首先我们来看看最后实现的效果。Demo最后附上。点击隐藏明细,会把明细收缩,点击显示明细会把明细显示出来。
接下来开始讲解如何一步一步做出这个报表:
第一步,创建如上窗体,拉入控件SimpleButton,DocumentViewer,SplitContainerControl,LabelControl,TextEdit,GroupControl,简单布局我就不多说了,跟上篇一样的布局 ,详见:http://www.cnblogs.com/lhmlyx2723356/p/3286101.html
提示一点:DocumentViewer控件一开始是没有打印工具栏的,以前12.几的版本,添加打印工具栏是拖入PrintSystem控件,但是13.1.5我发现没有了,后来在官网找到了答案。控件12.几的控件PrintControl, PringBarManager, PrintRibbonController都集成到了DocumentViewer ,详情请参考http://www.devexpress.com/Support/Center/Question/Details/Q504260,
那13.1.5如何添加打印工具栏呢?如图:选中DocumentViewer控件右上角的三角符号,点击红色区域中的其中一项都可以创建打印工具栏。
第二步,创建一个DrillDown报表文件。如图:
第三步,我们利用数据库做一张简单的表并输入一些测试值。如图:
第四步,数据库表,布局都做好了,接下来我们就来处理相对应的事件了。输入文本框的值,点击按钮把查询出来的数据源绑定到报表中
a,修改报表文件的构造函数,让它在实例化的时候可以接收数据源。
public DrillDrownRpt(DataSet ds)//修改构造函数 {
InitializeComponent();
Bind(ds);
}private void Bind(DataSet ds)
{
this.DataSource = ds;
this.DataMember = "Dept";
DetailReport.DataMember = "RelationColumn";
DetailReport.DataSource = ds;//把dept_id属性绑定到lblShowHide的Tag属性,当点击lblShowHide(显示明细/隐藏明细是)时,可以根据dept_id去判断显示隐藏明细情况。
this.lblShowHide.DataBindings.Add("Tag", ds, "Dept.dept_id");this.xrLabel3.DataBindings.Add("Text", ds, "Dept.dept_name");
this.xrTableCell1.DataBindings.Add("Text", ds, "RelationColumn.user_id");
this.xrTableCell2.DataBindings.Add("Text", ds, "RelationColumn.username");
}const string sShowDetail = "显示明细";
const string sHideDetail = "隐藏明细";
ArrayList expandedValues = new ArrayList();//判断是否存在部门ID
bool ShouldShowDetail(int catID)
{
return expandedValues.Contains(catID);
}//根据lblShowHide的Tag属性去判断lblShowHide显示文本是显示明细还是隐藏明细
private void lblShowHide_BeforePrint(object sender, System.Drawing.Printing.PrintEventArgs e)
{
XRLabel label = (XRLabel)sender;//(int)label.Tag返回的是dept_id,调用ShouldShowDetail 方法,如果true则让lblShowHide显示隐藏明细。反之,显示显示明细
if (ShouldShowDetail((int)label.Tag))
{
label.Text = sHideDetail;
}
else
{
label.Text = sShowDetail;
}
}private void DetailReport_BeforePrint(object sender, System.Drawing.Printing.PrintEventArgs e)
{
e.Cancel = !ShouldShowDetail((int)GetCurrentColumnValue("dept_id"));
}//鼠标移动到lblShowHide时,鼠标样式变成手形
private void lblShowHide_PreviewMouseMove(object sender, PreviewMouseEventArgs e)
{
Cursor.Current = Cursors.Hand;
}private void lblShowHide_PreviewClick(object sender, PreviewMouseEventArgs e)
{
int index = (int)e.Brick.Value;
bool showDetail = ShouldShowDetail(index);
if (showDetail)
{
expandedValues.Remove(index);
}
else
{
expandedValues.Add(index);
}
CreateDocument();
}b,获取数据源
private DataSet BindRpt()
{
DataSet ds = new DataSet();
try
{
//连接数据源,给DrillDrownRpt绑定数据源,包含两个数据表
SqlConnection con = new SqlConnection("Data Source=(local);Integrated Security=SSPI;Initial Catalog=DxReports");
SqlDataAdapter adapter;
con.Open();
adapter = new SqlDataAdapter("SELECT * FROM Dept", con);
adapter.Fill(ds, "Dept");
adapter = new SqlDataAdapter("select * from Users", con);
adapter.Fill(ds, "User");
con.Close();//给数据集建立主外键关系
DataColumn ParentColumn = ds.Tables["Dept"].Columns["dept_id"];
DataColumn ChildColumn = ds.Tables["User"].Columns["dept_id"];
DataRelation Rel = new DataRelation("RelationColumn", ParentColumn, ChildColumn);
ds.Relations.Add(Rel);
}
catch (Exception ex)
{
throw ex;
}
return ds;
}c,单击按钮,绑定数据到报表中
private void btnShowReport_Click(object sender, EventArgs e)
{
DataSet ds = BindRpt();
DrillDrownRpt Rpt = new DrillDrownRpt(ds);
this.documentViewer1.DocumentSource = Rpt;
Rpt.CreateDocument();
}到此,报表就向下钻取报表就完成了。
希望对初学者有点帮助。谢谢。
Demo地址:http://yunpan.cn/QXzZnfJVPHQ7I 访问密码 4a86
[原创]Devexpress XtraReports 系列 7 创建Drill-Down(向下钻取)报表的更多相关文章
- [原创]Devexpress XtraReports 系列 4 创建多栏报表
昨天我们完成了 [原创]Devexpress XtraReports 系列 3 创建主从报表 今天我们继续学习新的一种报表模式:多栏报表.(Demo源码,数据库最后附上) 或许很多人会问什么是多栏报表 ...
- [原创]Devexpress XtraReports 系列 5 创建交叉报表
昨天我们已经介绍了如何创建多栏报表,详见:[原创]Devexpress XtraReports 系列 4 创建多栏报表 今天我们继续我们的XtraReports系列.Demo和数据库文件最后会附上. ...
- [原创]Devexpress XtraReports 系列 6 创建并排报表
昨天我们已经介绍了如何创建交叉报表,详见:[原创]Devexpress XtraReports 系列 5 创建交叉报表 今天我们继续我们的XtraReports系列.Demo和数据库文件最后会附上. ...
- [原创]Devexpress XtraReports 系列 8 创建Drill-Through报表
哎,今天公司工作忙了一天,一直没有时间写写东西.所以只能昨天晚上加班写咯.苦逼啊...... 昨天发表了Devexpress XtraReports系列第七篇[原创]Devexpress XtraRe ...
- [原创]Devexpress XtraReports 系列 9 创建邮件合并报表
昨天发表了Devexpress XtraReports系列第八篇[原创]Devexpress XtraReports 系列 8 创建Drill-Through报表,今天我们继续. 今天的主题是创建邮件 ...
- [原创]Devexpress XtraReports 系列 10 创建标签报表
今天这篇是Dx Reports 基础初级系列的最后一篇了.以后如果有什么高级的应用,应该另开一个中级使用系列. 昨天发表了Devexpress XtraReports系列第九篇[原创]Devexpre ...
- [原创]Devexpress XtraReports 系列 3 创建主从报表
昨天写了系列的第二篇Devexpress XtraReports 系列 2 创建表格报表 . 今天我们来继续系列 3 创建主从报表 首先我们来看看最后实现的效果.Demo最后附上. 开始吧. 第一步, ...
- [原创]Devexpress XtraReports 系列 2 创建表格报表
昨天发表了Devexpress XtraReports系列开篇,今天我们继续. 今天的主题是创建表格报表. 首先我们来看看最后实现的效果.Demo最后附上. 接下来开始讲解如何一步一步做出这个报表: ...
- [原创]Devexpress XtraReports 系列 1 创建静态报表
在各种管理系统中,报表是必不可少的.报表是数据最直观体现的方式之一 以前,屌丝我是微软的忠实粉丝,所以报表工具就是微软自带的RDLC... 不可否认的是RDLC的功能是非常强大的.能够满足绝大多数的要 ...
随机推荐
- UVa401 回文词
Palindromes A regular palindrome is a string of numbers or letters that is the same forward as backw ...
- [xUnix 开发环境--01] MAMP mac os 10.10 配置经历、要点——01. phpmyadmin连不上
Mac OS 10.10已经自带了apache2和php(php的路径我至今还没不知道,太懒没去找) 用brew安装mysql, 在官网上下载了phpmyadmin,按官方方式配置完后,登录不上,也不 ...
- toB的产品经理和toc产品经理区别
腾讯产品经理现身说法 曾经在UC做过2年to c的app,现在在腾讯做to b的产品. 做to c产品的时候,我很瞧不起做to b产品的同学,认为他们不过是做支撑的. 后来,我参与了一个to b平台级 ...
- C的结构体使用
C的结构体演示 #include <stdio.h> struct A //建立结构体A { char *name; int s1; struct A *next; }; void mai ...
- 判断https
判断https <script> if(window.location.protocol=='https:'){ window.location.href='http://e.abchin ...
- 《Unix网络编程》卷2 读书笔记 第3章- System V IPC
1. 概述 三种类型的System V IPC:System V 消息队列.System V 信号量.System V 共享内存区 System V IPC在访问它们的函数和内核为它们维护的信息上共享 ...
- Shell教程6-Shell注释
以“#”开头的行就是注释,会被解释器忽略. sh里没有多行注释,只能每一行加一个#号.只能像这样: #-------------------------------------------- # 这是 ...
- 实现两个N*N矩阵的乘法,矩阵由一维数组表示
实现两个N*N矩阵的乘法,矩阵由一维数组表示. 先介绍一下矩阵的加法: void Add(int rows, int cols) { ;i<rows;i++) { ;j<cols;j++) ...
- Media Player 把光盘中的内容拷贝出来的方法
http://jingyan.baidu.com/article/cb5d610529f0c1005c2fe0b4.html 这个链接是通过Media Player 把光盘中的内容拷贝出来的方法h ...
- Drupal配置文件settings.php搜索规则
Drupal的配置文件搜索是通过bootstrap.inc的conf_path()函数实现的: function conf_path($require_settings = TRUE, $reset ...



