[原创]Devexpress XtraReports 系列 4 创建多栏报表
昨天我们完成了 [原创]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 创建多栏报表的更多相关文章
- [原创]Devexpress XtraReports 系列 9 创建邮件合并报表
昨天发表了Devexpress XtraReports系列第八篇[原创]Devexpress XtraReports 系列 8 创建Drill-Through报表,今天我们继续. 今天的主题是创建邮件 ...
- [原创]Devexpress XtraReports 系列 5 创建交叉报表
昨天我们已经介绍了如何创建多栏报表,详见:[原创]Devexpress XtraReports 系列 4 创建多栏报表 今天我们继续我们的XtraReports系列.Demo和数据库文件最后会附上. ...
- [原创]Devexpress XtraReports 系列 10 创建标签报表
今天这篇是Dx Reports 基础初级系列的最后一篇了.以后如果有什么高级的应用,应该另开一个中级使用系列. 昨天发表了Devexpress XtraReports系列第九篇[原创]Devexpre ...
- [原创]Devexpress XtraReports 系列 6 创建并排报表
昨天我们已经介绍了如何创建交叉报表,详见:[原创]Devexpress XtraReports 系列 5 创建交叉报表 今天我们继续我们的XtraReports系列.Demo和数据库文件最后会附上. ...
- [原创]Devexpress XtraReports 系列 7 创建Drill-Down(向下钻取)报表
昨天发表了Devexpress XtraReports系列第六篇[原创]Devexpress XtraReports 系列 6 创建并排报表,今天我们继续. 今天的主题是创建Drill-Down报表. ...
- [原创]Devexpress XtraReports 系列 8 创建Drill-Through报表
哎,今天公司工作忙了一天,一直没有时间写写东西.所以只能昨天晚上加班写咯.苦逼啊...... 昨天发表了Devexpress XtraReports系列第七篇[原创]Devexpress XtraRe ...
- [原创]Devexpress XtraReports 系列 3 创建主从报表
昨天写了系列的第二篇Devexpress XtraReports 系列 2 创建表格报表 . 今天我们来继续系列 3 创建主从报表 首先我们来看看最后实现的效果.Demo最后附上. 开始吧. 第一步, ...
- [原创]Devexpress XtraReports 系列 2 创建表格报表
昨天发表了Devexpress XtraReports系列开篇,今天我们继续. 今天的主题是创建表格报表. 首先我们来看看最后实现的效果.Demo最后附上. 接下来开始讲解如何一步一步做出这个报表: ...
- [原创]Devexpress XtraReports 系列 1 创建静态报表
在各种管理系统中,报表是必不可少的.报表是数据最直观体现的方式之一 以前,屌丝我是微软的忠实粉丝,所以报表工具就是微软自带的RDLC... 不可否认的是RDLC的功能是非常强大的.能够满足绝大多数的要 ...
随机推荐
- 宏ut_mem_block_t
/** This struct is placed first in every allocated memory block */ typedef struct ut_mem_block_struc ...
- noi2015的回忆和教训
前几天偶然打开了bzoj的rank list,突然发现——我竟然掉出了第一版!!! 自从我5月还是6月刷进第一版之后,我曾经天真的以为大概半年之内我还能保留在第一版内吧. 结果仅仅短短的4个月,我就已 ...
- HTTP全部报文首部字段
总结了一下HTTP各种报文首部字段. HTTP报文类型与结构 HTTP报文结构 报文首部 空行(CR+LF) 报文主体 HTTP报文类型 http有两种类型报文,请求报文和响应报文两种报文的首部结构如 ...
- 编译器错误消息: CS0016: 未能写入输出文件
“/”应用程序中的服务器错误. 编译错误 说明: 在编译向该请求提供服务所需资源的过程中出现错误.请检查下列特定错误详细信息并适当地修改源代码. 编译器错误消息: CS0016: 未能写入输出文件“c ...
- (转)ios获取设备系统信息
UIDevice *device_=[[UIDevice alloc] init]; NSLog(@"设备所有者的名称--%@",device_.name); NSLog(@&qu ...
- mysql连接超时
这几天在跟踪一个项目的时候,老是发现mysql连接报timeout的异常. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException ...
- 菜鸟学习笔记4——jquery事件
方法 描述 bind() 向匹配元素附加一个或更多事件处理器 blur() 触发.或将函数绑定到指定元素的 blur 事件 change() 触发.或将函数绑定到指定元素的 change 事件 cli ...
- swun 1766 我的悲剧不可能那么好数
解题思路: 一向提交特别慎重的我,这题竟然PE了5发左右,放了几天,再回来写,直接1A, 相当的自豪,而且是最优解题者.这题千万要注意,化繁为简,文章只包括大小 写字母和数字,还有空行. #inc ...
- 用Python抓网页的注意事项
用Python编一个抓网页的程序是非常快的,下面就是一个例子: import urllib2 html = urllib2.urlopen('http://blog.raphaelzhang.com' ...
- 给产品经理讲技术,不得不懂的TCP和UDP
TCP/IP协议,你一定经常听说吧,其中TCP(Transmission Control Protocol)称为传输控制协议,IP(Internet Protocol)称为因特网互联协议,好吧,这都是 ...





