昨天写了系列的第二篇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 创建主从报表的更多相关文章

  1. [原创]Devexpress XtraReports 系列 6 创建并排报表

    昨天我们已经介绍了如何创建交叉报表,详见:[原创]Devexpress XtraReports 系列 5 创建交叉报表 今天我们继续我们的XtraReports系列.Demo和数据库文件最后会附上. ...

  2. [原创]Devexpress XtraReports 系列 5 创建交叉报表

    昨天我们已经介绍了如何创建多栏报表,详见:[原创]Devexpress XtraReports 系列 4 创建多栏报表 今天我们继续我们的XtraReports系列.Demo和数据库文件最后会附上. ...

  3. [原创]Devexpress XtraReports 系列 8 创建Drill-Through报表

    哎,今天公司工作忙了一天,一直没有时间写写东西.所以只能昨天晚上加班写咯.苦逼啊...... 昨天发表了Devexpress XtraReports系列第七篇[原创]Devexpress XtraRe ...

  4. [原创]Devexpress XtraReports 系列 10 创建标签报表

    今天这篇是Dx Reports 基础初级系列的最后一篇了.以后如果有什么高级的应用,应该另开一个中级使用系列. 昨天发表了Devexpress XtraReports系列第九篇[原创]Devexpre ...

  5. [原创]Devexpress XtraReports 系列 2 创建表格报表

    昨天发表了Devexpress XtraReports系列开篇,今天我们继续. 今天的主题是创建表格报表. 首先我们来看看最后实现的效果.Demo最后附上. 接下来开始讲解如何一步一步做出这个报表: ...

  6. [原创]Devexpress XtraReports 系列 4 创建多栏报表

    昨天我们完成了 [原创]Devexpress XtraReports 系列 3 创建主从报表 今天我们继续学习新的一种报表模式:多栏报表.(Demo源码,数据库最后附上) 或许很多人会问什么是多栏报表 ...

  7. [原创]Devexpress XtraReports 系列 7 创建Drill-Down(向下钻取)报表

    昨天发表了Devexpress XtraReports系列第六篇[原创]Devexpress XtraReports 系列 6 创建并排报表,今天我们继续. 今天的主题是创建Drill-Down报表. ...

  8. [原创]Devexpress XtraReports 系列 9 创建邮件合并报表

    昨天发表了Devexpress XtraReports系列第八篇[原创]Devexpress XtraReports 系列 8 创建Drill-Through报表,今天我们继续. 今天的主题是创建邮件 ...

  9. [原创]Devexpress XtraReports 系列 1 创建静态报表

    在各种管理系统中,报表是必不可少的.报表是数据最直观体现的方式之一 以前,屌丝我是微软的忠实粉丝,所以报表工具就是微软自带的RDLC... 不可否认的是RDLC的功能是非常强大的.能够满足绝大多数的要 ...

随机推荐

  1. Codeforces Round #272 (Div. 2) C. Dreamoon and Sums (数学 思维)

    题目链接 这个题取模的时候挺坑的!!! 题意:div(x , b) / mod(x , b) = k( 1 <= k <= a).求x的和 分析: 我们知道mod(x % b)的取值范围为 ...

  2. CAS 在 Tomcat 中实现单点登录

    单点登录(Single Sign On , 简称 SSO )是目前比较流行的服务于企业业务整合的解决方案之一, SSO 使得在多个应用系统 中,用户只需要登录一次就可以访问所有相互信任的应用系统.CA ...

  3. 64位Ubuntu 13.04 安装Bochs 2.3.5

    bochs 2.3.5源码编译 网上编译bochs的资料非常多,基本的问题都有解决方案,我重点讲不常见的问题. 基本安装步骤 tar vxzf bochs-2.3.5.tar.gz cd bochs- ...

  4. UVa 10048 Audiophobia【Floyd】

    题意:给出一个c个点,s条边组成的无向图,求一点到另一点的路径上最大权值最小的路径,输出这个值 可以将这个 d[i][j]=min(d[i][j],d[i][k]+d[k][j]) 改成 d[i][j ...

  5. (转载)NSTimer

    转自:http://www.cnblogs.com/smileEvday/archive/2012/12/21/NSTimer.html 看到这个标题,你可能会想NSTimer不就是计时器吗,谁不会用 ...

  6. MAC自动备份数据到服务器

    需求:公司内部使用自己电脑,回家需要使用另一台电脑,所以想时时备份公司用的电脑中文件.代码到服务器上,回家就可以用啦 1 无密码使用scp (1)第一步:生成密匙对,我用的是rsa的密钥.使用命令 & ...

  7. a标签包input引起的问题

    最近公司中的一个项目中,有一个同事跟我说,他写的输入框不能选中输入内容了,并且光标也不能插入到已写好的文字其他位置. 简化了一下他的代码结构,如下: <a href="javascri ...

  8. 模拟实现死亡之Ping(Ping of death)

    需求描述 使用hping构造IP分片,模拟实现死亡之Ping 环境搭建 使用VMWare和Dynamips. 实现思路 构造重装后大于65535字节的IP分片 hping 192.168.1.1 -1 ...

  9. Linux/Unix shell sql 之间传递变量

    灵活结合Linux/Unix Shell 与SQL 之间的变量传输,极大程度的提高了DBA的工作效率,本文针对Linux/Unix shell sql 之间传递变量给出几个简单的示例以供参考. Lin ...

  10. 关于iOS APP中网络层的设计

    在iOS开发中,请求网络数据,处理获得的数据是很常见的功能,但是很少有资料会讨论关于网络的处理应该放在MVC中得哪个层中. 我在网上Google了一番,记下了几个觉得比较不错的链接.现记录如下: ht ...