ReportViewer 矩阵控件

ReportViewer 矩阵控件

今天遇到一个奇葩的需求,要把一个原来是竖着排列的A4纸报表,改成A4横着打印,一张纸上要打印4个报表,这4个报表是按从左到右依次来的。
即从这样的报表:

变成这样子:


第一种大家应该都会,不会的也知道...在报表上拖个table或者list控件就完事了,自动竖着来...妥妥的。

对于第二种,不知道Matrix控件的着实有点小难,即使知道用Matrix可以实现却从来没用过这玩意儿也的确头大,毕竟不知道对应的原理,要摸索老半天。

这里就针对这个需求,记录一下矩阵控件的简单用法:

1.首先呢,在数据库建个简单的student表,只有俩字段:


2.然后在VS中新建一个winform项目,拖个reportviewer控件上去,再新建一个报表rdlc文件,一个xsd数据集文件
,在窗体的报表控件上指定报表rdlc文件;

3.为xsd文件指定数据源,就是刚刚新建的学生表:





4.为rdlc文件指定数据源:


vs2012的在左边...


5.为报表绑定数据源实例

6.设计报表rdlc文件,从报表工具箱拖个矩阵出来:


再在数据方块里放一个list控件:


调整下矩阵大小,右下角数据那一块尽量大一点,然后在list控件里加一个矩形控件boderStyle选择solid,然后加4个textbox,两个用来作title,两个显示数据:

运行一下,不用说,现在肯定是竖着来显示的:


那怎么设置才能显示成从左到右每行两个呢?
对于矩阵控件:列和行又代表什么意思呢?

实际上很简单:行和列代表当前报表文件绑定的数据源里的两个字段,报表会自动根据这个列和行字段,来显示不同的扩张样式。说不明白啊。。。下面看操作就知道:

我们需要在数据库多加3个字段:orderIndex(为方便操作增加的自增长字段,oracle有rownum可以不必加),rowIndex,columnIndex:
--增加自增长列
alter table student add orderIndex numeric(5,0) identity(1,1);
--列索引
alter table student add rowIndex char(10) null;
--行索引
alter table student add columnIndex char(10) null;
执行完上面的,再初始化下3个字段:
declare 
@rowIndex int=1, --从1开始 1,1,2,2,3,3,...
@columnIndex int=1, --从1开始 1,2,1,2,1,2...
@loop int=1,--一行一行执行
@maxNum int --表记录行数

select @maxNum=COUNT(*) from student;

while @loop<=@maxNum
begin
	update t set t.rowIndex=@rowIndex,t.columnIndex=@columnIndex 
	from student t
	where t.orderIndex=@loop;

	if(@columnIndex=1)
		set @columnIndex=@columnIndex+1
	else
		set @columnIndex=@columnIndex-1
	if((@loop%2)=0)
		set @rowIndex=@rowIndex+1

	set @loop=@loop+1;
end
最后表记录变成:


重点是rowIndex,columnIndex两个字段的值,不明白仔细研究下吧,想通了很简单:

把矩阵的行绑定rowIndex字段,列绑定columnIndex(注意报表宽度要容纳两个矩阵宽度以上);

运行看下效果:


这样就已经实现了功能。
实际上这只是一个简单的矩阵,还有复杂矩阵,需要自己添加矩阵列组、行组的...
不过再复杂都可以借此例来参考~


发布了49 篇原创文章 · 获赞 71 · 访问量 23万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章