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


    昨天写了系列的第二篇Devexpress XtraReports 系列 2 创建表格报表

    今天我们来继续系列 3 创建主从报表

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

     QQ截图20130828110806

    开始吧。

    第一步,建立一个WinForm窗体,从工具箱中拉入控件SimpleButton,DocumentViewer,SplitContainerControl,LabelControl,TextEdit,GroupControl,简单布局(见效果图)我就不多阐述了。

    第二步,创建一个Devexpress XtraReport报表文件。如图:

    QQ截图20130828112328

    在报表中首先建立一个ReportHeader,如图

    在报表文件空白区域右键QQ图片20130828112653

    然后添加一个从报表DetailReport:如图

    QQ截图20130828112813

    接着在ReportHeader 拉入一个XRLabel 修改Text属性为:主从报表(至于字体大小属性等修改,个人有各自喜好的字体大小,颜色,我就不多累赘介绍了。)

    然后在Detail和DetailReport区分别拉入一个XRTable控件(XRTable默认三列)。根据字段需要添加删除列数。

    至此,报表布局也完成了。

    第三步,创建数据源表。如图:一个部门主表,一个人员从表,一对多的关系,一个部门下有多个人员。利用dept_id关联。

    QQ图片20130828113517 QQ截图20130828113622

    第四步,让我们来处理相对应的主从表关系绑定吧。

    很简单,效果就是要点击显示报表按钮,让数据源绑定到报表中。我们如何做呢?

    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

  • 相关阅读:
    043 抖音短视频爬取实战
    048 Python里面yield的实现原理
    047 Python面试知识点小结
    001 Glang实现简单分布式缓存
    046 算法的时间复杂度和空间复杂度计算
    042 使用Python远程监视多个服务器和数据库的状态,python,监控,同步
    041基于python实现jenkins自动发布代码平台
    045 chrome浏览器前端调试技巧
    STL学习
    Asio与Boost.Asio
  • 原文地址:https://www.cnblogs.com/lhmlyx2723356/p/3288363.html
Copyright © 2020-2023  润新知