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


    昨天我们完成了 [原创]Devexpress XtraReports 系列 3 创建主从报表

    今天我们继续学习新的一种报表模式:多栏报表。(Demo源码,数据库最后附上)

    或许很多人会问什么是多栏报表。

    根据官方回答是:以多个列或行 (取决于当前的多栏设置) 呈现数据的报表。

    这种报表是有用的,例如,当每个明细区都只显示少量数据、并且需要在一列的右侧打印下一个明细区时,这样就能充分利用整个页面宽度。 此外,当创建有相同内容的 卡片或邮寄地址签、并且需要在许多报表页面上打印大量相同尺寸的卡片时,多栏报表也是有用的。

    案例场景:我们有很多产品分别属于不同类别,现在老板说要看看我们不同类别下都有什么产品。为了让老板更加一目了然,多栏报表就派上用场了。如图:也是该案例最后效果图:如果按照传统的Table报表,那么产品名称(如:手镯1,2,3,4,5)会一直往下排,而右边有一大片空间是浪费的,老板看上去也非常费力。此时多栏报表就派上用场了。

    QQ截图20130828155742

    开始讲解。

    第一步:窗体布局。

    新建一个WinForm窗体,,拉入第三方控件SimpleButton,DocumentViewer,SplitContainerControl,LabelControl,TextEdit,GroupControl,无非就是设置空间Dock属性,还有字体Text属性等,简单布局我就不多阐述了。可以参考我该系列第一篇。

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

    QQ截图20130828160519

    报表布局步骤如下:(不知道为什么我的设计器是中文的,英文的朋友找到相对应的就行了)

    a,新建报表头:即是上图中的ReportHeader,在报表空白区右键点击

    image

    b,新建产品类型分组头:即是上图中的GroupHeader(用于类别分组),在报表空白区右键点击

    image

    在GroupHeader区域拉入一个XRTable控件。

    c,设置明细区一些属性。即是上图中的Detail区的属性

    QQ截图20130828161523 

    在Detail区域拉入一个XRLabel控件,用于绑定类别下的产品名称。

    第三步:Demo数据,如图

    QQ截图20130828161803

    第四步,一切准备就绪,接下来就来处理方法事件了。

    a,我们需要获取绑定到报表中的数据源,怎么获取呢?

    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 ManyColumnData where category=@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, "ManyColumnRpt"); ;
              con.Close();
          }
          catch (Exception ex)
          {
              throw ex;
          }
          return ds;
      }

    b,我们要把数据源绑定到报表的相对应的控件上,怎样绑定呢?

    在报表文件里,修改其构造函数,用于后面点击按钮传过来的数据源。

    public ManyColumnRpt(DataSet ds)
       {
           InitializeComponent();
           this.DataSource = ds;
           this.DataMember = "ManyColumnRpt";
           this.xrTableCell1.DataBindings.Add("Text", ds, "category");
           GroupField gf = new GroupField("category", XRColumnSortOrder.Ascending);//设置GroupHeader分组字段
           ((GroupHeaderBand)(this.FindControl("GroupHeader1", true))).GroupFields.Add(gf);//把分组字段添加进GroupHeader1
           this.xrLabel2.DataBindings.Add("Text", ds, "name");
       }

    c,我们需要点击按钮把数据源绑定到报表中,如何做呢?

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

    到此,我们就把一个多栏报表完成了。。

    希望对大家有帮助。。。最后附上源码以及数据库文件

    http://yunpan.cn/QXEibmsrxZp4f  访问密码 d86e

  • 相关阅读:
    网络流练习
    Noip2018 游记
    4719: [Noip2016]天天爱跑步
    1875: [SDOI2009]HH去散步
    P2619 [国家集训队2]Tree I
    1493: [NOI2007]项链工厂
    P1710 地铁涨价
    P3694 邦邦的大合唱站队
    P1439 【模板】最长公共子序列
    P1132 数字生成游戏
  • 原文地址:https://www.cnblogs.com/lhmlyx2723356/p/3290743.html
Copyright © 2020-2023  润新知