报表中Mail Label 的使用
生活随笔
收集整理的這篇文章主要介紹了
报表中Mail Label 的使用
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
Crystal Report在報表向?qū)е刑峁┝巳N向?qū)ь愋徒o用戶進行選擇——Standard、Cross-Tab和Mail Label,而Visual Studio/BIDS報表向?qū)е挥袃煞N——表格格式和矩陣,這是和Crystal Report的前兩種報表類型相對對應的,那么怎么在Visual Studio/BIDS中實現(xiàn)Mail Label呢? 先來看一下什么是Mail Label。Mail Label如果直譯成中文的話,就是“郵件標簽”,這是一個有歧義的名詞,一些郵箱(如Gmail)和客戶端郵件工具(如Foxmail)將“郵件標簽”作為一種將郵件進行分類以方便信息管理的工具。而本篇隨筆討論的顯然無關(guān)“電子”郵件,而是一種比較常用的報表。設(shè)想如下的場景:如果一個組織(比如一家出版社)需要向一批客戶發(fā)一份比較正式的書面信件(比如征訂啟事)。而這些客戶的通信地址、收件人郵政編碼等又以某種形式(數(shù)據(jù)庫、平面文件等)存儲在計算機中,工作人員顯然不希望在每一個信封上手工書寫這些信息,他/她要做的無非是把這些打印出來并粘貼到信封上就可以了。這樣的話,一個普通的報表也可能就已經(jīng)能夠滿足他/她的需求了,盡管我們知道郵政編碼、通信地址、收件人三個字段之間是需要換行的。但是,如果他/她恰巧使用的是常見的如A4之類的紙張,而同時他/她又不希望浪費紙張,那么他/她希望要的報表可能就是如圖1所示的報表了。這就是所謂的“郵件標簽”報表了,當然“郵件標簽”報表不僅僅局限于多個信件通信地址的一次打印,凡是具有類似結(jié)構(gòu)的報表都可以被稱為“郵件標簽”報表。
圖1 Access的Northwind示例數(shù)據(jù)庫中的“郵件標簽”報表(點擊小圖看大圖) 正如圖1的標題所示,Access是支持“郵件標簽”報表的,不過在報表設(shè)計上只是讓標簽中涉及到的字段縱向排列而已,真正實現(xiàn)多列標簽打印是通過對報表的“頁面設(shè)置”來完成的,如圖2所示。
圖2 Access中“郵件標簽”報表的“頁面設(shè)置” 在進行報表設(shè)計之前,我們先為本文的郵件標簽進行數(shù)據(jù)準備。本文的示例報表的數(shù)據(jù)來源于SQL Server 2005的示例數(shù)據(jù)庫AdventureWorks,在AdventureWorks數(shù)據(jù)庫中使用以下SQL語句建立視圖Production.MailLabel: 代碼1:創(chuàng)建視圖Production.MailLabel
USE?[AdventureWorks]
GO
/**//******?對象:??View?[Production].[MailLabel]????腳本日期:?08/26/2006?16:05:26?******/
SET?ANSI_NULLS?ON
GO
SET?QUOTED_IDENTIFIER?ON
GO
CREATE?VIEW?[Production].[MailLabel]
AS
SELECT?????Production.Product.Name,?Production.Product.Color,?Production.ProductPhoto.ThumbNailPhoto
FROM?????????Production.Product?INNER?JOIN
??????????????????????Production.ProductProductPhoto?ON?Production.Product.ProductID?=?
Production.ProductProductPhoto.ProductID?INNER?JOIN
??????????????????????Production.ProductPhoto?ON?Production.ProductProductPhoto.ProductPhotoID?=?
Production.ProductPhoto.ProductPhotoID
WHERE?????(Production.Product.Color?IS?NOT?NULL)
GO 打開視圖,我們可以得到如圖3所示的示例數(shù)據(jù),這將是本文示例所使用的報表數(shù)據(jù)。
圖3 示例使用數(shù)據(jù) 也就是說,本文的示例演示的郵件標簽中展示的數(shù)據(jù)是AdventureWorks生產(chǎn)的自行車的名稱、顏色以及縮略圖。 既然是郵件標簽,我們要將Name、Color以及ThumbNailPhoto這三個一行中字段縱向顯示,這個比較容易實現(xiàn);我們還需要將指定行數(shù)的數(shù)據(jù)作為一列顯示在報表中,這就涉及到行到列的轉(zhuǎn)換問題。事實上,可以說行列轉(zhuǎn)換問題是郵件標簽報表面臨的最大的問題,要解決這個問題,一種可行的方案是使用SQL語句中出現(xiàn)在FROM子句中的PIVOT關(guān)系運算符將表結(jié)構(gòu)進行轉(zhuǎn)換,然后使用Table控件顯示數(shù)據(jù)。另外,我們知道標準控件中的Matrix控件的功能其實就是一個Pivot Table(數(shù)據(jù)透視表),我們可以清楚地在控件工具欄上看到對Matrix控件的提示是“用于任何多列樣式報表的行列布局”,該控件對數(shù)據(jù)的處理其實是和PIVOT運算符是相通的,就是說使用該控件可以避免使用PIVOT運算符而實現(xiàn)一個交叉表的結(jié)構(gòu),所以本文選擇使用這種方案來實現(xiàn)郵件標簽報表。 1、創(chuàng)建報表服務器項目RDLML。 2、新建共享數(shù)據(jù)源DataMailLabel,設(shè)置到數(shù)據(jù)庫AdventureWorks的連接,并為報表指定相應的訪問憑據(jù)。 3、不使用向?qū)陆▓蟊韗ptMailLabel,在報表設(shè)計器的“數(shù)據(jù)”選項卡,新建數(shù)據(jù)集MailLabel,使用工具欄按鈕切換到通用查詢設(shè)計器,在“關(guān)系圖”窗格中使用右鍵菜單“添加表”并選擇視圖Production.MailLabel,選擇Name、Color、ThumbNailPhoto三列作為輸出,這樣我們在SQL窗口中可以看到以下SQL語句: 代碼2:選擇數(shù)據(jù)的SQL語句
SELECT?
????Name,?
????Color,?
????ThumbNailPhoto
FROM?Production.MailLabel
??? 4、在SQL窗格中修改代碼2中的SQL語句如代碼3所示。 代碼3:修改代碼2得到的SQL語句
SELECT?
????(ROW_NUMBER()?OVER?(ORDER?BY?Name)?-?1)?/?4?+?1?AS?TitleRow,?
????(ROW_NUMBER()?OVER?(ORDER?BY?Name)?-?1)?%?4?+?1?AS?TitleColumn,?
????Name,?
????Color,?
????ThumbNailPhoto
FROM?Production.MailLabel
??? 代碼3中,ROW_NUMBER()用于為返回數(shù)據(jù)的行號,需要和OVER關(guān)鍵字結(jié)合使用,使用OVER關(guān)鍵字可能會導致圖4所示提示信息的出現(xiàn),這是由于通用查詢設(shè)計器不支持OVER關(guān)鍵字所導致的,而事實上T-SQL是支持該關(guān)鍵字的,可以忽略此信息的出現(xiàn)。
圖4 使用OVER關(guān)鍵字出現(xiàn)的提示信息 代碼3選擇出的數(shù)據(jù)如圖5所示。
圖5 代碼3選擇出的數(shù)據(jù) 5、按照圖6的方式進行報表布局設(shè)計。
圖6 報表布局設(shè)計 其中,拖動圖像控件到報表布局時會出現(xiàn)“圖像向?qū)А?#xff0c;在“選擇圖像源”頁面中選中“數(shù)據(jù)庫”,并在接下來的“指定圖像字段”頁面中,進行如圖7所示的設(shè)置。
圖7 指定圖像字段(點擊小圖看大圖) 6、選中值為“=Fields!TitleRow.Value”的文本框,右鍵“屬性”,在“文本框?qū)傩浴睂υ捒虻摹翱梢娦浴边x項卡中,選擇“初始可見性”為“隱藏”,同樣設(shè)置值為“=Fields!TitleColumn.Value”的文本框。 7、為了明顯區(qū)分郵件標簽列表中的各個項目,可以選中列表框控件,F4調(diào)出屬性瀏覽器,設(shè)置BorderColor為LightGray,設(shè)置BorderStyle為Dashed;另外,為了使報表看起來更美觀,可以在列表框中微調(diào)控件的位置。 OK,到此為止,一個郵件標簽報表就設(shè)計完成了,其預覽效果如圖8所示。
圖1 Access的Northwind示例數(shù)據(jù)庫中的“郵件標簽”報表(點擊小圖看大圖) 正如圖1的標題所示,Access是支持“郵件標簽”報表的,不過在報表設(shè)計上只是讓標簽中涉及到的字段縱向排列而已,真正實現(xiàn)多列標簽打印是通過對報表的“頁面設(shè)置”來完成的,如圖2所示。
圖2 Access中“郵件標簽”報表的“頁面設(shè)置” 在進行報表設(shè)計之前,我們先為本文的郵件標簽進行數(shù)據(jù)準備。本文的示例報表的數(shù)據(jù)來源于SQL Server 2005的示例數(shù)據(jù)庫AdventureWorks,在AdventureWorks數(shù)據(jù)庫中使用以下SQL語句建立視圖Production.MailLabel: 代碼1:創(chuàng)建視圖Production.MailLabel
USE?[AdventureWorks]
GO
/**//******?對象:??View?[Production].[MailLabel]????腳本日期:?08/26/2006?16:05:26?******/
SET?ANSI_NULLS?ON
GO
SET?QUOTED_IDENTIFIER?ON
GO
CREATE?VIEW?[Production].[MailLabel]
AS
SELECT?????Production.Product.Name,?Production.Product.Color,?Production.ProductPhoto.ThumbNailPhoto
FROM?????????Production.Product?INNER?JOIN
??????????????????????Production.ProductProductPhoto?ON?Production.Product.ProductID?=?
Production.ProductProductPhoto.ProductID?INNER?JOIN
??????????????????????Production.ProductPhoto?ON?Production.ProductProductPhoto.ProductPhotoID?=?
Production.ProductPhoto.ProductPhotoID
WHERE?????(Production.Product.Color?IS?NOT?NULL)
GO 打開視圖,我們可以得到如圖3所示的示例數(shù)據(jù),這將是本文示例所使用的報表數(shù)據(jù)。
圖3 示例使用數(shù)據(jù) 也就是說,本文的示例演示的郵件標簽中展示的數(shù)據(jù)是AdventureWorks生產(chǎn)的自行車的名稱、顏色以及縮略圖。 既然是郵件標簽,我們要將Name、Color以及ThumbNailPhoto這三個一行中字段縱向顯示,這個比較容易實現(xiàn);我們還需要將指定行數(shù)的數(shù)據(jù)作為一列顯示在報表中,這就涉及到行到列的轉(zhuǎn)換問題。事實上,可以說行列轉(zhuǎn)換問題是郵件標簽報表面臨的最大的問題,要解決這個問題,一種可行的方案是使用SQL語句中出現(xiàn)在FROM子句中的PIVOT關(guān)系運算符將表結(jié)構(gòu)進行轉(zhuǎn)換,然后使用Table控件顯示數(shù)據(jù)。另外,我們知道標準控件中的Matrix控件的功能其實就是一個Pivot Table(數(shù)據(jù)透視表),我們可以清楚地在控件工具欄上看到對Matrix控件的提示是“用于任何多列樣式報表的行列布局”,該控件對數(shù)據(jù)的處理其實是和PIVOT運算符是相通的,就是說使用該控件可以避免使用PIVOT運算符而實現(xiàn)一個交叉表的結(jié)構(gòu),所以本文選擇使用這種方案來實現(xiàn)郵件標簽報表。 1、創(chuàng)建報表服務器項目RDLML。 2、新建共享數(shù)據(jù)源DataMailLabel,設(shè)置到數(shù)據(jù)庫AdventureWorks的連接,并為報表指定相應的訪問憑據(jù)。 3、不使用向?qū)陆▓蟊韗ptMailLabel,在報表設(shè)計器的“數(shù)據(jù)”選項卡,新建數(shù)據(jù)集MailLabel,使用工具欄按鈕切換到通用查詢設(shè)計器,在“關(guān)系圖”窗格中使用右鍵菜單“添加表”并選擇視圖Production.MailLabel,選擇Name、Color、ThumbNailPhoto三列作為輸出,這樣我們在SQL窗口中可以看到以下SQL語句: 代碼2:選擇數(shù)據(jù)的SQL語句
SELECT?
????Name,?
????Color,?
????ThumbNailPhoto
FROM?Production.MailLabel
??? 4、在SQL窗格中修改代碼2中的SQL語句如代碼3所示。 代碼3:修改代碼2得到的SQL語句
SELECT?
????(ROW_NUMBER()?OVER?(ORDER?BY?Name)?-?1)?/?4?+?1?AS?TitleRow,?
????(ROW_NUMBER()?OVER?(ORDER?BY?Name)?-?1)?%?4?+?1?AS?TitleColumn,?
????Name,?
????Color,?
????ThumbNailPhoto
FROM?Production.MailLabel
??? 代碼3中,ROW_NUMBER()用于為返回數(shù)據(jù)的行號,需要和OVER關(guān)鍵字結(jié)合使用,使用OVER關(guān)鍵字可能會導致圖4所示提示信息的出現(xiàn),這是由于通用查詢設(shè)計器不支持OVER關(guān)鍵字所導致的,而事實上T-SQL是支持該關(guān)鍵字的,可以忽略此信息的出現(xiàn)。
圖4 使用OVER關(guān)鍵字出現(xiàn)的提示信息 代碼3選擇出的數(shù)據(jù)如圖5所示。
圖5 代碼3選擇出的數(shù)據(jù) 5、按照圖6的方式進行報表布局設(shè)計。
圖6 報表布局設(shè)計 其中,拖動圖像控件到報表布局時會出現(xiàn)“圖像向?qū)А?#xff0c;在“選擇圖像源”頁面中選中“數(shù)據(jù)庫”,并在接下來的“指定圖像字段”頁面中,進行如圖7所示的設(shè)置。
圖7 指定圖像字段(點擊小圖看大圖) 6、選中值為“=Fields!TitleRow.Value”的文本框,右鍵“屬性”,在“文本框?qū)傩浴睂υ捒虻摹翱梢娦浴边x項卡中,選擇“初始可見性”為“隱藏”,同樣設(shè)置值為“=Fields!TitleColumn.Value”的文本框。 7、為了明顯區(qū)分郵件標簽列表中的各個項目,可以選中列表框控件,F4調(diào)出屬性瀏覽器,設(shè)置BorderColor為LightGray,設(shè)置BorderStyle為Dashed;另外,為了使報表看起來更美觀,可以在列表框中微調(diào)控件的位置。 OK,到此為止,一個郵件標簽報表就設(shè)計完成了,其預覽效果如圖8所示。
轉(zhuǎn)載于:https://blog.51cto.com/zhjjzhjj/469078
總結(jié)
以上是生活随笔為你收集整理的报表中Mail Label 的使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Silverlight Blend动画
- 下一篇: 巨人的前瞻:独家专访IBM磁盘存储CTO