[原创]Devexpress XtraReports 系列 3 创建主从报表
昨天写了系列的第二篇Devexpress XtraReports 系列 2 创建表格报表 。
今天我们来继续系列 3 创建主从报表
首先我们来看看最后实现的效果。Demo最后附上。
开始吧。
第一步,建立一个WinForm窗体,从工具箱中拉入控件SimpleButton,DocumentViewer,SplitContainerControl,LabelControl,TextEdit,GroupControl,简单布局(见效果图)我就不多阐述了。
第二步,创建一个Devexpress XtraReport报表文件。如图:
在报表中首先建立一个ReportHeader,如图
在报表文件空白区域右键
然后添加一个从报表DetailReport:如图
接着在ReportHeader 拉入一个XRLabel 修改Text属性为:主从报表(至于字体大小属性等修改,个人有各自喜好的字体大小,颜色,我就不多累赘介绍了。)
然后在Detail和DetailReport区分别拉入一个XRTable控件(XRTable默认三列)。根据字段需要添加删除列数。
至此,报表布局也完成了。
第三步,创建数据源表。如图:一个部门主表,一个人员从表,一对多的关系,一个部门下有多个人员。利用dept_id关联。
![]()
第四步,让我们来处理相对应的主从表关系绑定吧。
很简单,效果就是要点击显示报表按钮,让数据源绑定到报表中。我们如何做呢?
a,按钮事件
private void btnShowReport_Click(object sender, EventArgs e)
{
DataSet ds = BindRpt();
MasterDetailRpt Rpt = new MasterDetailRpt(ds);//注意:修改我们新建的MasterDetailRpt报表文件的构造函数。让其可以接收我们传递的数据源。
this.documentViewer1.DocumentSource = Rpt;
Rpt.CreateDocument();
}b,获取数据源,并设置两个表主从关系。
private DataSet BindRpt()
{DataSet ds = new DataSet();
try
{
//连接数据源,给Rpt绑定数据源,包含两个数据表
//在示例中为了方便就不写存储过程了,(日常工作中存储过程方便维护)
SqlConnection con = new SqlConnection("Data Source=(local);Integrated Security=SSPI;Initial Catalog=ReportDeom");
SqlDataAdapter adapter;
con.Open();//表1
SqlCommand cmd = new SqlCommand("SELECT * FROM Dept where dept_name=@dept_name OR @dept_name='' ", con);
SqlParameter[] paras = new SqlParameter[]{
new SqlParameter("@dept_name",txtdept_name.Text)
};
cmd.Parameters.AddRange(paras);
adapter = new SqlDataAdapter(cmd);
adapter.Fill(ds, "Dept");//表2
SqlCommand cmd2 = new SqlCommand("select * FROM Users where dept_id in (select dept_id from Dept where dept_name=@dept_name OR @dept_name='') ", con);
SqlParameter[] paras2 = new SqlParameter[]{
new SqlParameter("@dept_name",txtdept_name.Text)
};
cmd2.Parameters.AddRange(paras2);
adapter = new SqlDataAdapter(cmd2);
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,绑定数据到报表文件
public MasterDetailRpt(DataSet ds)
{
InitializeComponent();
//绑定主表
this.DataSource = ds;
this.DataMember = "Dept";
this.xrTableCell3.DataBindings.Add("Text", ds, "Dept.dept_name");
DetailReport.DataMember = "RelationColumn";
//绑定从表
DetailReport.DataSource = ds;
this.xrTableCell1.DataBindings.Add("Text", ds, "RelationColumn.user_id");
this.xrTableCell2.DataBindings.Add("Text", ds, "RelationColumn.username");
}
到此, 基于Devexpress XtraReport主从报表就完成了。
希望对初学者有点帮助。谢谢。
Demo(包括数据库文件) :http://yunpan.cn/QXESD5YscCfkw 访问密码 b675
[原创]Devexpress XtraReports 系列 3 创建主从报表的更多相关文章
- [原创]Devexpress XtraReports 系列 6 创建并排报表
昨天我们已经介绍了如何创建交叉报表,详见:[原创]Devexpress XtraReports 系列 5 创建交叉报表 今天我们继续我们的XtraReports系列.Demo和数据库文件最后会附上. ...
- [原创]Devexpress XtraReports 系列 5 创建交叉报表
昨天我们已经介绍了如何创建多栏报表,详见:[原创]Devexpress XtraReports 系列 4 创建多栏报表 今天我们继续我们的XtraReports系列.Demo和数据库文件最后会附上. ...
- [原创]Devexpress XtraReports 系列 8 创建Drill-Through报表
哎,今天公司工作忙了一天,一直没有时间写写东西.所以只能昨天晚上加班写咯.苦逼啊...... 昨天发表了Devexpress XtraReports系列第七篇[原创]Devexpress XtraRe ...
- [原创]Devexpress XtraReports 系列 10 创建标签报表
今天这篇是Dx Reports 基础初级系列的最后一篇了.以后如果有什么高级的应用,应该另开一个中级使用系列. 昨天发表了Devexpress XtraReports系列第九篇[原创]Devexpre ...
- [原创]Devexpress XtraReports 系列 2 创建表格报表
昨天发表了Devexpress XtraReports系列开篇,今天我们继续. 今天的主题是创建表格报表. 首先我们来看看最后实现的效果.Demo最后附上. 接下来开始讲解如何一步一步做出这个报表: ...
- [原创]Devexpress XtraReports 系列 4 创建多栏报表
昨天我们完成了 [原创]Devexpress XtraReports 系列 3 创建主从报表 今天我们继续学习新的一种报表模式:多栏报表.(Demo源码,数据库最后附上) 或许很多人会问什么是多栏报表 ...
- [原创]Devexpress XtraReports 系列 7 创建Drill-Down(向下钻取)报表
昨天发表了Devexpress XtraReports系列第六篇[原创]Devexpress XtraReports 系列 6 创建并排报表,今天我们继续. 今天的主题是创建Drill-Down报表. ...
- [原创]Devexpress XtraReports 系列 9 创建邮件合并报表
昨天发表了Devexpress XtraReports系列第八篇[原创]Devexpress XtraReports 系列 8 创建Drill-Through报表,今天我们继续. 今天的主题是创建邮件 ...
- [原创]Devexpress XtraReports 系列 1 创建静态报表
在各种管理系统中,报表是必不可少的.报表是数据最直观体现的方式之一 以前,屌丝我是微软的忠实粉丝,所以报表工具就是微软自带的RDLC... 不可否认的是RDLC的功能是非常强大的.能够满足绝大多数的要 ...
随机推荐
- DataGridView 相关操作
一.单元格内容的操作// 取得当前单元格内容 Console.WriteLine(DataGridView1.CurrentCell.Value); // 取得当前单元格的列 Index Consol ...
- linux字符驱动程序结构
linux内核为字符设备的驱动程序设计,提供了一些数据结构,和函数,供开发人员调用,将设备驱动程序注册到内核去.现代操作系统几乎都不直接和硬件通信,而是通过定义的接口,是硬件厂商自己来开发符合标准某个 ...
- Qt之QHeaderView自定义排序(获取正确的QModelIndex)
简述 前几节中分享过关于自定义排序的功能,貌似我们之前的内容已经可以很好地解决排序问题了,但是,会由此引发一些很难发现的问题...比如:获取QModelIndex索引错误. 下面,我们先来实现一个整行 ...
- hadoop1常见配置含义
参数 取值 备注 fs.default.name NameNode ...
- php开启curl扩展
配置方法: 1.拷贝PHP目录中的libeay32.dll 和 ssleay32.dll 两个文件到 system32 目录. 2.修改php.ini:配置好 extension_dir ,去掉 ex ...
- [转] gc tips(1)
所有应用软件都需要管理内存,一个应用软件的内存管理系统包括了如下准则:什么时候派发内存,要派发多少内存,什么时候把东西放到回收站,以及什么时候清空回收站.MMgc是Flash Player几乎所有内存 ...
- 【转】Xcode6 模拟器路径
原文网址:http://www.cocoachina.com/bbs/read.php?tid-231024.html Xcode6发布后,出现了很多的变动,功能性的变动,在这里不进行过多的赘述,在W ...
- Wiki知识介绍
Wiki简介 Wiki一词来源于夏威夷语的“wee kee wee kee”,原本是“快点快点”的意思,被译为“维基”或“维客”.一种多人协作的写作工具.Wiki站点可以有多人(甚至任何访问者)维护, ...
- Maven安装testNG
1.Maven安装testNG (1)打开网站:http://testng.org/doc/maven.html (2)复制如下代码,粘贴到项目的pom.xml文件: 1 <dependency ...
- 【转】linux之ln命令
转自:http://www.cnblogs.com/peida/archive/2012/12/11/2812294.html ln是linux中又一个非常重要命令,它的功能是为某一个文件在另外一个位 ...




