开发者论坛

 找回密码
 注册 (请使用非IE浏览器)
查看: 5644|回复: 6

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

[复制链接]

0

精华

935

贡献

265

赞扬

帖子
4122
软币
9958
在线时间
366 小时
注册时间
2013-7-21
发表于 2013-9-2 22:49:35 | 显示全部楼层 |阅读模式
本帖最后由 lhmlyx2723356 于 2013-9-2 23:46 编辑

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

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

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

首先我们来看看最后实现的效果。Demo最后附上。
今天学了弄了一个新东西,就是录制gif图片。哈哈
111.gif

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

第一步,创建如上窗体,拉入控件SimpleButton,DocumentViewer,SplitContainerControl,LabelControl,TextEdit,GroupControl,简单布局我就不多说了,跟上篇一样的布局 ,详见:http://www.dxper.net/thread-1042-1-1.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控件右上角的三角符号,点击红色区域中的其中一项都可以创建打印工具栏。
QQ图片20130902223750.png


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

QQ截图20130902221333.png

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

第四步,数据库表,布局都做好了,接下来我们就来处理相对应的事件了。

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报表就完成了。
个人表达能力有限,如果有疑问,欢迎大家下载示例代码,一目了然。
又到了大家最怀念的时刻,屌丝福利时间,哈哈,应坛主要求,要重口味。所以有了第二张图。
4ec2d5628535e5dd66d396f077c6a7efce1b6225.jpg ac6eddc451da81cb9bbf80255366d016082431f8.jpg
别忘了点赞呀。。。嘿嘿。。您的赞是我最大的动力。。。

希望对大家有帮助。。。最后附上源码以及数据库备份文件
Demo地址:http://yunpan.cn/QXpSNHXT5PBFr  访问密码 5817


评分

参与人数 4贡献 +12 赞扬 +4 收起 理由
dsir + 1 赞一个
wj3031 + 1 赞一个
ssa521 + 2 + 1 赞一个
羽叶 + 10 + 1 赞一个

查看全部评分

回复

使用道具 举报

0

精华

5095

贡献

5276

赞扬

管理员

帖子
1149
软币
20969
在线时间
4317 小时
注册时间
2013-6-7

黄马甲

发表于 2013-9-2 23:40:15 | 显示全部楼层
偷工减料,这飞机场算啥福利啊
回复

使用道具 举报

0

精华

105

贡献

28

赞扬

帖子
73
软币
1055
在线时间
173 小时
注册时间
2013-6-20
发表于 2013-9-3 17:34:21 | 显示全部楼层
支持楼主继续发帖。认真学习中
回复

使用道具 举报

0

精华

935

贡献

265

赞扬

帖子
4122
软币
9958
在线时间
366 小时
注册时间
2013-7-21
 楼主| 发表于 2013-9-3 17:37:42 | 显示全部楼层
qhdxzy 发表于 2013-9-3 17:34
支持楼主继续发帖。认真学习中

对你有帮助就行。。哈哈。。顺便赞一个哈。。。我会继续发原创帖的。。
回复

使用道具 举报

0

精华

0

贡献

48

赞扬

帖子
61
软币
741
在线时间
75 小时
注册时间
2013-8-29
发表于 2013-9-3 17:39:31 | 显示全部楼层
不错,多分享点教程。
回复

使用道具 举报

0

精华

935

贡献

265

赞扬

帖子
4122
软币
9958
在线时间
366 小时
注册时间
2013-7-21
 楼主| 发表于 2013-9-3 17:57:40 | 显示全部楼层
panpan 发表于 2013-9-3 17:39
不错,多分享点教程。

会继续分享,不过下次别忘了点赞哈
回复

使用道具 举报

Archiver|手机版|小黑屋|开发者网 ( 苏ICP备08004430号-2 )
版权所有:南京韵文教育信息咨询有限公司

GMT+8, 2024-4-29 01:54

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表