哎,今天公司工作忙了一天,一直没有时间写写东西。所以只能昨天晚上加班写咯。苦逼啊。。。。。。

昨天发表了Devexpress XtraReports系列第七篇[原创]Devexpress XtraReports 系列 7 创建Drill-Down(向下钻取)报表,今天我们继续。

今天的主题是创建Drill-Through报表。

首先我们来看看最后实现的效果。Demo最后附上。

今天学了弄了一个新东西,就是录制gif图片。哈哈

接下来开始讲解如何一步一步做出这个报表:

第一步,创建如上窗体,拉入控件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控件右上角的三角符号,点击红色区域中的其中一项都可以创建打印工具栏。

第二步,创建一个DrillThroughRpt报表文件和一个点击DrillThroughRpt报表跳转到的明细报表DrillThroughRpt2报表。如图:

第三步,我们利用数据库做一张简单的表并输入一些测试值。如图:

第四步,数据库表,布局都做好了,接下来我们就来处理相对应的事件了。输入文本框的值,点击按钮把查询出来的数据源绑定到报表中

a,修改DrillThroughRpt报表文件的构造函数,让它在实例化的时候可以接收数据源。

public DrillThroughRpt(DataSet ds)
      {
          InitializeComponent();
          this.DataSource = ds;
          this.DataMember = "Dept";
          this.xrLabel3.DataBindings.Add("Text", ds, "dept_name");
      }

//把当前行赋值到Label的Tag属性

private void xrLabel3_BeforePrint(object sender, System.Drawing.Printing.PrintEventArgs e)
      {
          ((XRLabel)sender).Tag = GetCurrentRow();
      }

private void xrLabel3_PreviewClick(object sender, PreviewMouseEventArgs e)
      {
          DrillThroughRpt2 detailReport = new DrillThroughRpt2();

//传递参数
          detailReport.dept_id.Value = (int)((DataRowView)e.Brick.Value).Row["dept_id"];
          detailReport.dept_name.Value = ((DataRowView)e.Brick.Value).Row["dept_name"].ToString();
          detailReport.ShowPreviewDialog();
      }

b,设置DrillThroughRpt报表2

技巧:最开始,我也不知道如何定义参数,你可以通过向导方式去生成报表,然后再去Designer.cs文件查看生成的代码,我们就知道如何用代码方式去生成一些我们不知道的东西了。

//定义传递参数dept_id,dept_name

public DevExpress.XtraReports.Parameters.Parameter dept_id = new DevExpress.XtraReports.Parameters.Parameter();
public DevExpress.XtraReports.Parameters.Parameter dept_name = new DevExpress.XtraReports.Parameters.Parameter();

public DrillThroughRpt2()
       {
           InitializeComponent();

this.dept_id.Name = "dept_id";
           this.dept_id.Type = typeof(int);

this.dept_name.Name = "dept_name";
           this.xrLabel2.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
           new DevExpress.XtraReports.UI.XRBinding(dept_name, "Text", "")});

this.FilterString = "dept_id = ?dept_id";
           this.Parameters.AddRange(new DevExpress.XtraReports.Parameters.Parameter[] {
           this.dept_id,
           this.dept_name});
           this.RequestParameters = false;

this.xrTableCell1.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
           new DevExpress.XtraReports.UI.XRBinding("Text", null, "user_id")});

DataSet ds = Bind();

this.DataSource = ds;
           this.xrTableCell1.DataBindings.Add("Text", ds, "user_id");
           this.xrTableCell2.DataBindings.Add("Text", ds, "username");
       }

//获取数据源

public DataSet Bind()
       {
           DataSet ds = new DataSet();
           try
           {
               SqlConnection con = new SqlConnection("Data Source=(local);Integrated Security=SSPI;Initial Catalog=ReportDeom");
               SqlDataAdapter adapter;
               con.Open();
               adapter = new SqlDataAdapter("SELECT * FROM Users", con);
               adapter.Fill(ds, "Users"); ;
               con.Close();
           }
           catch (Exception ex)
           {

throw ex;
           }

return ds;
       }

c,获取数据源

private DataSet BindRpt()
       {
           DataSet ds = new DataSet();
           try
           {
               SqlConnection con = new SqlConnection("Data Source=(local);Integrated Security=SSPI;Initial Catalog=ReportDeom");
               SqlDataAdapter adapter;
               con.Open();
               SqlCommand cmd = new SqlCommand("SELECT * FROM Dept where dept_name=@name OR @name='' ", con);
               SqlParameter[] paras = new SqlParameter[]{
                   new SqlParameter("@name",txtName.Text.Trim())
               };
               cmd.Parameters.AddRange(paras);
               adapter = new SqlDataAdapter(cmd);
               adapter.Fill(ds, "DrillThroughRpt"); ;
               con.Close();
           }
           catch (Exception ex)
           {
               throw ex;
           }
           return ds;
       }

d,单击按钮,绑定数据到报表中

private void btnShowReport_Click(object sender, EventArgs e)
    {
        DataSet ds = BindRpt();
        DrillThroughRpt Rpt = new DrillThroughRpt(ds);
        this.documentViewer1.DocumentSource = Rpt;
        Rpt.CreateDocument();
    }

到此,报表就Drill-Through报表就完成了。

个人表达能力有限,如果有疑问,欢迎大家下载示例代码,一目了然。

Demo地址:http://yunpan.cn/QXpSNHXT5PBFr  访问密码 5817

[原创]Devexpress XtraReports 系列 8 创建Drill-Through报表的更多相关文章

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

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

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

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

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

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

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

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

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

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

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

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

  7. [原创]Devexpress XtraReports 系列 3 创建主从报表

    昨天写了系列的第二篇Devexpress XtraReports 系列 2 创建表格报表 . 今天我们来继续系列 3 创建主从报表 首先我们来看看最后实现的效果.Demo最后附上. 开始吧. 第一步, ...

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

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

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

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

随机推荐

  1. C# Winform DataGridView分页功能的实现

    // 1.定义几个所需的公有成员: ; //每页显示行数 ; //总记录数 ; //页数=总记录数/每页显示行数 ; //当前页号 ; //当前记录行 DataSet ds = new DataSet ...

  2. CodeSmith listview属性

    private void button1_Click(object sender, EventArgs e)//将数据库中读出来的信息直接显示在listview里 { //连接数据库 SqlConne ...

  3. css新增UI样式

    1.圆角 border-radius <style> .box{width:200px;height:300px;border:1px solid #000;border-radius:1 ...

  4. Codeforces 445 A DZY Loves Chessboard【DFS】

    题意:给出n*m的棋盘,在‘.’处放上B或者W,最后要求所有的B和W都不相邻 先把棋盘的点转化成‘B’,再搜,如果它的四周存在‘B’,则将它变成'W' 一直挂在第五个数据的原因是,没有dfs(nx,n ...

  5. POJ 3565 Ants (最小权匹配)

    题意 给出一些蚂蚁的点,给出一些树的点,两两对应,使他们的连线不相交,输出一种方案. 思路 一开始没想到怎么用最小权匹配--后来发现是因为最小权匹配的方案一定不相交(三角形两边之和大于第三边)--还是 ...

  6. java金额的加减乘除

    package com.wedge.edp.framework.common.util; import java.math.BigDecimal; /** * 金额的加减乘除 */ public cl ...

  7. nodejs开发阶段利器supervisor

    在开始学习nodejs时,往往一般写代码,一边看效果.先停止node,再重新运行.非常耗时. 这时supervisor派上了用场. 安装 推荐使用npm,本人一直使用局部安装,这样可以将全部文件安装在 ...

  8. Heritrix源码分析(四) 各个类说明(转)

    Heritrix的类的确很繁琐,往往继承了一层又一层,最多的继承好像有7层.下面就一个包一个包的说明每个类的作用,由于里面Heritrix组件分明,很多组件没用到的同时该组件的类我也没怎么接触,所以这 ...

  9. Ruby on rail 开发准备

    下载安装Instant Rails ,该软件包中包含了Ruby,Rails,Apache(HTTP服务器软件),MySql,并且配置均可自动完成.完成安装后就可以拥有一个完整的Rails开发环境.下载 ...

  10. Kyoto Cabinet(DBM) + Kyoto Tycoon(网络层)

    项目原地址kyotocabinet: http://fallabs.com/kyotocabinet/       kyototycoon:   http://fallabs.com/kyototyc ...