[原创]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的功能是非常强大的.能够满足绝大多数的要 ...
随机推荐
- in command-line: path> mvn eclipse:clean path> mvn -Dwtpversion=1.5 eclipse:eclipse path> mvn eclipse:eclipse in eclipse: Project / clean...
原因:tomcat已经启动了 2007-10-9 12:26:16 org.apache.coyote.http11.Http11AprProtocol init严重: Error initializ ...
- HDU 1025 (LIS+二分) Constructing Roads In JGShining's Kingdom
这是最大上升子序列的变形,可并没有LIS那么简单. 需要用到二分查找来优化. 看了别人的代码,给人一种虽不明但觉厉的赶脚 直接复制粘贴了,嘿嘿 原文链接: http://blog.csdn.net/i ...
- phpstorm10.0.1和webstorm11注册
webstorm11 for win 注册时选择“License server”输入“http://15.idea.lanyus.com/”点击“OK” phpstorm10.0.1 for win ...
- 理解ASP.NET MVC的路由系统
引言 路由,正如其名,是决定消息经由何处被传递到何处的过程.也正如网络设备路由器Router一样,ASP.NET MVC框架处理请求URL的方式,同样依赖于一张预定义的路由表.以该路由表为转发依据,请 ...
- 部署HBase远程访问的问题集合(Eclipse)
实现远程访问HBase,可以通过Eclipse开发工具方便进行代码调试. 为了方便jar包各种版本的管理,才用maven进行代码构建 首先,下载并安装maven以及M2Eclipse插件 其次,配置m ...
- 一天一点MySQL复习——存储过程
一.存储过程概念 使用SQL编写访问数据库的代码时,可用两种方法存储和执行这些代码,一种是在客户端存储代码,并创建向数据库服务器发送的SQL命令(或SQL语句),比如在C#.Java等客户端编程语言中 ...
- is_file和file_exists效率比较
目前在弄文件缓存的时候用到了判定文件存在与否,is_file()还是file_exists()呢?is_file和file_exists两者效率比较起来,谁的运行速度更快呢?还是做个测试吧: 1 2 ...
- library cache lock和cursor: pin S wait on X等待
1.现象: 客户10.2.0.4 RAC环境,出现大量的library cache lock和cursor: pin S wait on X等待,经分析是由于统计信息收集僵死导致的.数据库在8点到9点 ...
- 如何用HTML5+PhoneGap写个Path项目
最近Path这个应用很火爆,网上也出现了不少仿Path菜单的项目.即使在原生APP里边,Path的效果也是非常赞的.我突然想,Web APP是不是也能做出类似Path那样的效果呢?于是就有了OPath ...
- jQuery Mobile 1.1八大新特性介绍
随着HTML 5时代的来临,移动开发开始进入了一个新的时代,现在只需要懂得HTML5,配合一定的开发框架,就可以开发出十分漂亮的HTML5的移动应用.在众多的 移动HTML5开发框架中,比较著名的是j ...