开发者论坛

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

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

[复制链接]

0

精华

935

贡献

265

赞扬

帖子
4122
软币
9958
在线时间
366 小时
注册时间
2013-7-21
发表于 2013-8-28 11:54:53 | 显示全部楼层 |阅读模式
本帖最后由 lhmlyx2723356 于 2013-8-28 11:54 编辑

昨天写了系列的第二篇:Devexpress XtraReports 系列 2 创建表格报表
今天我们来继续系列 3 创建主从报表
首先我们来看看最后实现的效果。Demo最后附上。
QQ截图20130828110806.png
开始吧。
第一步,建立一个WinForm窗体,拉入控件SimpleButton,DocumentViewer,SplitContainerControl,LabelControl,TextEdit,GroupControl,简单布局我就不多阐述了。
第二步,创建一个Devexpress XtraReport报表文件。如图:
QQ截图20130828112328.png

在报表中首先建立一个ReportHeader,如图
在报表文件空白区域右键 QQ图片20130828112653.jpg
然后添加一个从报表DetailReport:如图
QQ截图20130828112813.png

接着在ReportHeader 拉入一个XRLabel 修改Text属性为:主从报表(至于字体属性等修改,我就不多累赘介绍了。)
然后在Detail和DetailReport区分别拉入一个XRTable控件(XRTable默认三列)。根据字段需要添加删除列数。
至此,报表布局也完成了。
第三步,创建数据源表。如图:一个部门主表,一个人员从表,一对多的关系,一个部门下有多个人员。利用dept_id关联。
QQ图片20130828113517.jpg QQ截图20130828113622.png
第四步,让我们来处理相对应的主从表关系绑定吧。
很简单,效果就是要点击显示报表按钮,让数据源绑定到报表中。我们如何做呢?
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
别忘了点赞呀。。。嘿嘿。。您的赞是我最大的动力。。。
最后又是我们一贯的送福利时间,哈哈。。屌丝们。。。持续雄起吧。。。
2013080742669093_600x0.jpg



评分

参与人数 5贡献 +5 赞扬 +5 收起 理由
htp000000 + 1 很给力
羽叶 + 5 + 1 很给力
ssa521 + 1 感谢分享
hyblusea + 1 我表示是来看美女的。。。。。.
yrolive + 1 Thanks

查看全部评分

回复

使用道具 举报

0

精华

1

贡献

0

赞扬

帖子
104
软币
851
在线时间
118 小时
注册时间
2013-7-30
发表于 2013-8-28 11:56:48 | 显示全部楼层
好牛B的样子,必须顶
回复

使用道具 举报

0

精华

935

贡献

265

赞扬

帖子
4122
软币
9958
在线时间
366 小时
注册时间
2013-7-21
 楼主| 发表于 2013-8-28 12:42:40 | 显示全部楼层
Ivan 发表于 2013-8-28 11:56
好牛B的样子,必须顶

谢谢啊。。但是忘了点一下评分啊。。。哈哈
回复

使用道具 举报

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

GMT+8, 2024-5-5 12:08

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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