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萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章