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

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

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

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

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

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

开始讲解。

第一步:窗体布局。

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

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

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

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

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

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

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

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

第三步:Demo数据,如图

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

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

[原创]Devexpress XtraReports 系列 4 创建多栏报表的更多相关文章

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

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

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

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

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

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

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

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

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

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

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

    哎,今天公司工作忙了一天,一直没有时间写写东西.所以只能昨天晚上加班写咯.苦逼啊...... 昨天发表了Devexpress XtraReports系列第七篇[原创]Devexpress XtraRe ...

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

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

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

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

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

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

随机推荐

  1. JavaScript关闭窗口的方法

    当你创建了一个新窗口时,将open()方法的返回值分配给一个变量非常重要.比如,下面的语句就是创建一个新窗口,然后立即关闭它: win = window.open("http://www.d ...

  2. HTML中多媒体的应用_Flash/MP3/设置可以活动的文字

    一.HTML中多媒体的应用_falsh动画(往网页中插入Flash动画) 1. Flash动画插入第一种方法:使用<embed>...</embed>标记动画会自动缩小 属性: ...

  3. 事务&视图和索引

    一:事务 1.含义:事务是一个不可分割的整体,事务中的多个执行过程,同生共死.要么都执行成功,要么都执行失败. 事务必须具备以下四个属性,(简称:ACID): ①.原子性(Atomicity):事务的 ...

  4. UVa 11624 (BFS) Fire!

    也是一个走迷宫的问题,不过又有了点变化. 这里迷宫里有若干把火,而且火每秒也是向四个方向蔓延的.问人是否能走出迷宫. 我用了两遍BFS,第一遍把所有着火的格子加入队列,然后计算每个格子着火的时间. 第 ...

  5. MVC+Ef项目(3) 抽象数据库访问层的统一入口;EF上下文线程内唯一

    抽象一个数据库访问层的统一入口(类似于EF的上下文,拿到上下文,就可以拿到所有的表).实际这个入口就是一个类,类里面有所有的仓储对应的属性.这样,只要拿到这个类的实例,就可以点出所有的仓储,我们在 R ...

  6. codeigniter框架扩展核心类---实现前台后台视图的分离

    1. 扩展核心类,主要作用就是扩展系统现在的功能. 为前台增加独立的视图文件夹: a. 自定义路径常量 :在application ->config/  constants.php中增加 /*m ...

  7. AIX LVM 常用命令记录

    针对物理卷的操作指令 lsdev--列出ODM中的设备 chdev--修改一个AIX设备的属性 mkdev--创建一个AIX设备 chpv--修改物理卷的状态和属性 lspv--查看AIX中物理卷的相 ...

  8. ORA-00257错误

    Archiver error,connect internal only,until freed   表示归档日志目录已满,用户不能再连接数据库,现有用户可继续查询数据库,但是不能执行DML语句 插删 ...

  9. list() and tuple()

    >>> l = list('sdfsdf') >>> l ['s', 'd', 'f', 's', 'd', 'f'] >>> t = tuple ...

  10. IOS 单例 创建方式

    @implementation Me static Car *sharedInstance= nil;//声明一个静态对象引用并赋为nil +(Me *) sharedInstance//声明类方法( ...