[原创]Devexpress XtraReports 系列 6 创建并排报表
昨天我们已经介绍了如何创建交叉报表,详见:[原创]Devexpress XtraReports 系列 5 创建交叉报表
今天我们继续我们的XtraReports系列。Demo和数据库文件最后会附上。
今天的主题是:创建并排报表
什么是并排报表呢?
按照我个人理解:并排报表是把两张或者两张以上的报表,放在一个报表页面。
注:为了方便,本示例使用同一个数据源,但是您可以使用相同的方法,而在一个报表文档中显示两个完全不同的 (使用不同数据源的) 报表。
依照惯例,我们先来看看我们最后实现的效果,如图:
开始讲解。
第一步:窗体布局。
新建一个WinForm窗体,,拉入第三方控件SimpleButton,DocumentViewer,SplitContainerControl,LabelControl,TextEdit,GroupControl,无非就是设置空间Dock属性,还有字体Text属性等,简单布局我就不多阐述了。可以参考系列第一篇。
提示一点:DocumentViewer控件一开始是没有打印工具栏的,以前12.几的版本,添加打印工具栏是拖入PrintSystem控件,但是13.1.5我发现没有了,后来在官网找到了答案。控件12.几的控件PrintControl, PringBarManager, PrintRibbonController都集成到了DocumentViewer ,详情请参考http://www.devexpress.com/Support/Center/Question/Details/Q504260,
那13.1.5如何添加打印工具栏呢?如图:选中DocumentViewer控件右上角的三角符号,点击红色区域中的其中一项都可以创建打印工具栏。
第二步:创建两个个Devexpress XtraReport报表文件。一个是明细报表DetailSideBySideRpt(用于绑定到最后显示的并排报表MasterSideBySideRpt),一个是最后显示的并排报表MasterSideBySideRpt 如图:
报表布局步骤如下:(不知道为什么我的设计器是中文的,英文的朋友找到相对应的就行了)
首先,建立一个DetailSideBySideRpt文件 如图:
然后新建一个MasterSideBySideRpt,如图:
那如何把我们新建的DetailSideBySideRpt报表,并排显示到MasterSideBySideRpt呢?
方法一:如图:
注意:我一开始不知道为什么一直不能把【创建并排报表.DetailSideBySideRpt】选择到ReportSource,后来重新生成解决方案,就可以了。如果大家遇到选不上的时候,请试试重新生成解决方案。
方法二:例如代码方式:
this.xrSubreport1.ReportSource = new 创建并排报表.DetailSideBySideRpt();
this.xrSubreport2.ReportSource = new 创建并排报表.DetailSideBySideRpt();//这里我并排的两张报表都使用了同一个DetailSideBySideRpt,可以使用不同的
第三步,准备数据源,如图:
第四步,一切准备就绪,接下来就来处理方法事件了。
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 SideBySideRptData where name=@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, "SideBySideRpt"); ;
con.Close();
}
catch (Exception ex)
{
throw ex;
}
return ds;
}
b,修改DetailSideBySideRpt报表文件默认构造函数,让其可以接收数据源并绑定字段
public DetailSideBySideRpt(DataSet ds)
{
InitializeComponent();
this.DataSource = ds;
this.xrRichText1.DataBindings.Add("Text", ds, "name");
this.xrRichText2.DataBindings.Add("Text", ds, "birthday");
this.xrRichText3.DataBindings.Add("Text", ds, "description");
}
从上面可以很容易看出,我们只绑定了姓名,生日,简介三个字段,那如何绑定图片呢?
我们可以在XRPictureBox的BeforePrint事件中处理,从本地存放图片的文件夹中获取图片(在此之前应该把图片放到指定目录下),并绑定。
如图:把图片放到程序运行目录
private void xrPictureBox1_BeforePrint(object sender, System.Drawing.Printing.PrintEventArgs e)
{
string path = System.Environment.CurrentDirectory + "\\" + GetCurrentColumnValue("pictureurl");//从程序运行目录下获取
xrPictureBox1.Sizing = DevExpress.XtraPrinting.ImageSizeMode.ZoomImage;//设置图片显示模式
((XRPictureBox)sender).Image = Image.FromFile(path);
}
c,根据最终的效果图结合我们的数据源图,可以发现左边显示体育明星,右边显示影视明星,如何做到的呢?
其实,我们只需要处理一下事件。利用FilterString属性过滤数据源即可。
private void xrSubreport1_BeforePrint(object sender, System.Drawing.Printing.PrintEventArgs e)
{
((XRSubreport)sender).ReportSource.FilterString = "category =='体育明星'";
}
private void xrSubreport2_BeforePrint(object sender, System.Drawing.Printing.PrintEventArgs e)
{
((XRSubreport)sender).ReportSource.FilterString = "category =='影视明星'";
}
d,在这个示例中我利用代码的形式给MasterSideBySideRpt绑定数据源
public MasterSideBySideRpt(DataSet ds)
{
InitializeComponent();
this.xrSubreport1.ReportSource = new 创建并排报表.DetailSideBySideRpt(ds);
this.xrSubreport2.ReportSource = new 创建并排报表.DetailSideBySideRpt(ds);
}
e,最后我们处理显示报表按钮事件。把数据源传递给报表,并展示出来。
private void btnShowReport_Click(object sender, EventArgs e)
{
DataSet ds = BindRpt();
DetailSideBySideRpt DetailRpt = new DetailSideBySideRpt(ds);
MasterSideBySideRpt Rpt = new MasterSideBySideRpt(ds);
this.documentViewer1.DocumentSource = Rpt;
Rpt.CreateDocument();
}
到此,我们就把一个并排报表完成了。。 个人感觉这篇写的不是很顺,有疑问的话,大家可以看看源代码。
希望对大家有帮助。。。最后附上源码以及数据库备份文件
Demo地址:http://yunpan.cn/QXXFGrMsgggYH 访问密码 4648
[原创]Devexpress XtraReports 系列 6 创建并排报表的更多相关文章
- [原创]Devexpress XtraReports 系列 5 创建交叉报表
昨天我们已经介绍了如何创建多栏报表,详见:[原创]Devexpress XtraReports 系列 4 创建多栏报表 今天我们继续我们的XtraReports系列.Demo和数据库文件最后会附上. ...
- [原创]Devexpress XtraReports 系列 8 创建Drill-Through报表
哎,今天公司工作忙了一天,一直没有时间写写东西.所以只能昨天晚上加班写咯.苦逼啊...... 昨天发表了Devexpress XtraReports系列第七篇[原创]Devexpress XtraRe ...
- [原创]Devexpress XtraReports 系列 10 创建标签报表
今天这篇是Dx Reports 基础初级系列的最后一篇了.以后如果有什么高级的应用,应该另开一个中级使用系列. 昨天发表了Devexpress XtraReports系列第九篇[原创]Devexpre ...
- [原创]Devexpress XtraReports 系列 3 创建主从报表
昨天写了系列的第二篇Devexpress XtraReports 系列 2 创建表格报表 . 今天我们来继续系列 3 创建主从报表 首先我们来看看最后实现的效果.Demo最后附上. 开始吧. 第一步, ...
- [原创]Devexpress XtraReports 系列 2 创建表格报表
昨天发表了Devexpress XtraReports系列开篇,今天我们继续. 今天的主题是创建表格报表. 首先我们来看看最后实现的效果.Demo最后附上. 接下来开始讲解如何一步一步做出这个报表: ...
- [原创]Devexpress XtraReports 系列 7 创建Drill-Down(向下钻取)报表
昨天发表了Devexpress XtraReports系列第六篇[原创]Devexpress XtraReports 系列 6 创建并排报表,今天我们继续. 今天的主题是创建Drill-Down报表. ...
- [原创]Devexpress XtraReports 系列 4 创建多栏报表
昨天我们完成了 [原创]Devexpress XtraReports 系列 3 创建主从报表 今天我们继续学习新的一种报表模式:多栏报表.(Demo源码,数据库最后附上) 或许很多人会问什么是多栏报表 ...
- [原创]Devexpress XtraReports 系列 9 创建邮件合并报表
昨天发表了Devexpress XtraReports系列第八篇[原创]Devexpress XtraReports 系列 8 创建Drill-Through报表,今天我们继续. 今天的主题是创建邮件 ...
- [原创]Devexpress XtraReports 系列 1 创建静态报表
在各种管理系统中,报表是必不可少的.报表是数据最直观体现的方式之一 以前,屌丝我是微软的忠实粉丝,所以报表工具就是微软自带的RDLC... 不可否认的是RDLC的功能是非常强大的.能够满足绝大多数的要 ...
随机推荐
- kafka迁移与扩容
参考官网site: http://kafka.apache.org/documentation.html#basic_ops_cluster_expansion https://cwiki.apach ...
- find命令下的atime,ctime,mtime
Linux下的find命令在目录结构中搜索文件,并执行指定的操作.linux下的find命令提供了相当多的查找条件,功能很强大,由于find的功能很强大,所以他的选项也很多,今天我们来细说一下find ...
- 计算机网络——TCP三次、四次握手详解
三次握手:建立TCP连接 连接建立过程: B的TCP服务器进程先创建传输控制块TCB(存储了每一个连接中的一些重要信息,如:TCP连接表,到发送和接收缓存的指针,到重传队列的指针,当前的发送和接收序号 ...
- 【转】Github轻松上手4-常用的git命令
转自:http://blog.sina.com.cn/s/blog_4b55f6860100zzih.html 附上一些git的常见命令: • git remote add origin git ...
- 看人家如何拿到腾讯阿里的offer
我是如何同时拿到阿里和腾讯offer的: https://segmentfault.com/a/1190000002627927
- 嵌入式 uboot以及kernel添加看门狗临时记录(个人记录未整理乱)
Uboot_Kernerl_Add_Watch_Dog: U-Boot 2010.06 (Nov 01 2013 - 15:28:44) DRAM: 128 MiBCheck spi flash c ...
- XSS 前端防火墙(3):无懈可击的钩子
昨天尝试了一系列的可疑模块拦截试验,尽管最终的方案还存在着一些兼容性问题,但大体思路已经明确了: 静态模块:使用 MutationObserver 扫描. 动态模块:通过 API 钩子来拦截路径属性. ...
- 网络编程 --- URLConnection --- 读取服务器的数据 --- java
使用URLConnection类获取服务器的数据 抽象类URLConnection表示一个指向指定URL资源的活动连接,它是java协议处理器机制的一部分. URL对象的openConnection( ...
- Oracle 取两个表中数据的交集并集差异集合
Oracle 取两个表中数据的交集 关键字: Oracle 取两个表中数据的交集 INTERSECT Oracle 作为一个大型的关系数据库,日常应用中往往需要提取两个表的交集数据 例如现有如下表,要 ...
- 事务处理: databse jdbc mybatis spring
事务的认识需要一个相当漫长的流程,慢慢在实践中理解,然后在强化相关理论基础. 数据库中的事务: 传统的本地事务处理都是依靠数据库自身事务处理能力,而事务本身是传统关系型数据库的基石.简单来说事务就是一 ...