日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

报表中Mail Label 的使用

發布時間:2025/3/15 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 报表中Mail Label 的使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Crystal Report在報表向導中提供了三種向導類型給用戶進行選擇——Standard、Cross-Tab和Mail Label,而Visual Studio/BIDS報表向導只有兩種——表格格式和矩陣,這是和Crystal Report的前兩種報表類型相對對應的,那么怎么在Visual Studio/BIDS中實現Mail Label呢? 先來看一下什么是Mail Label。Mail Label如果直譯成中文的話,就是“郵件標簽”,這是一個有歧義的名詞,一些郵箱(如Gmail)和客戶端郵件工具(如Foxmail)將“郵件標簽”作為一種將郵件進行分類以方便信息管理的工具。而本篇隨筆討論的顯然無關“電子”郵件,而是一種比較常用的報表。設想如下的場景:如果一個組織(比如一家出版社)需要向一批客戶發一份比較正式的書面信件(比如征訂啟事)。而這些客戶的通信地址、收件人郵政編碼等又以某種形式(數據庫、平面文件等)存儲在計算機中,工作人員顯然不希望在每一個信封上手工書寫這些信息,他/她要做的無非是把這些打印出來并粘貼到信封上就可以了。這樣的話,一個普通的報表也可能就已經能夠滿足他/她的需求了,盡管我們知道郵政編碼、通信地址、收件人三個字段之間是需要換行的。但是,如果他/她恰巧使用的是常見的如A4之類的紙張,而同時他/她又不希望浪費紙張,那么他/她希望要的報表可能就是如圖1所示的報表了。這就是所謂的“郵件標簽”報表了,當然“郵件標簽”報表不僅僅局限于多個信件通信地址的一次打印,凡是具有類似結構的報表都可以被稱為“郵件標簽”報表。

圖1 Access的Northwind示例數據庫中的“郵件標簽”報表(點擊小圖看大圖)
正如圖1的標題所示,Access是支持“郵件標簽”報表的,不過在報表設計上只是讓標簽中涉及到的字段縱向排列而已,真正實現多列標簽打印是通過對報表的“頁面設置”來完成的,如圖2所示。

圖2 Access中“郵件標簽”報表的“頁面設置” 在進行報表設計之前,我們先為本文的郵件標簽進行數據準備。本文的示例報表的數據來源于SQL Server 2005的示例數據庫AdventureWorks,在AdventureWorks數據庫中使用以下SQL語句建立視圖Production.MailLabel: 代碼1:創建視圖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所示的示例數據,這將是本文示例所使用的報表數據。

圖3 示例使用數據
也就是說,本文的示例演示的郵件標簽中展示的數據是AdventureWorks生產的自行車的名稱、顏色以及縮略圖。 既然是郵件標簽,我們要將Name、Color以及ThumbNailPhoto這三個一行中字段縱向顯示,這個比較容易實現;我們還需要將指定行數的數據作為一列顯示在報表中,這就涉及到行到列的轉換問題。事實上,可以說行列轉換問題是郵件標簽報表面臨的最大的問題,要解決這個問題,一種可行的方案是使用SQL語句中出現在FROM子句中的PIVOT關系運算符將表結構進行轉換,然后使用Table控件顯示數據。另外,我們知道標準控件中的Matrix控件的功能其實就是一個Pivot Table(數據透視表),我們可以清楚地在控件工具欄上看到對Matrix控件的提示是“用于任何多列樣式報表的行列布局”,該控件對數據的處理其實是和PIVOT運算符是相通的,就是說使用該控件可以避免使用PIVOT運算符而實現一個交叉表的結構,所以本文選擇使用這種方案來實現郵件標簽報表。 1、創建報表服務器項目RDLML。 2、新建共享數據源DataMailLabel,設置到數據庫AdventureWorks的連接,并為報表指定相應的訪問憑據。 3、不使用向導新建報表rptMailLabel,在報表設計器的“數據”選項卡,新建數據集MailLabel,使用工具欄按鈕切換到通用查詢設計器,在“關系圖”窗格中使用右鍵菜單“添加表”并選擇視圖Production.MailLabel,選擇Name、Color、ThumbNailPhoto三列作為輸出,這樣我們在SQL窗口中可以看到以下SQL語句: 代碼2:選擇數據的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()用于為返回數據的行號,需要和OVER關鍵字結合使用,使用OVER關鍵字可能會導致圖4所示提示信息的出現,這是由于通用查詢設計器不支持OVER關鍵字所導致的,而事實上T-SQL是支持該關鍵字的,可以忽略此信息的出現。

圖4 使用OVER關鍵字出現的提示信息
代碼3選擇出的數據如圖5所示。

圖5 代碼3選擇出的數據
5、按照圖6的方式進行報表布局設計。

圖6 報表布局設計
其中,拖動圖像控件到報表布局時會出現“圖像向導”,在“選擇圖像源”頁面中選中“數據庫”,并在接下來的“指定圖像字段”頁面中,進行如圖7所示的設置。

圖7 指定圖像字段(點擊小圖看大圖)
6、選中值為“=Fields!TitleRow.Value”的文本框,右鍵“屬性”,在“文本框屬性”對話框的“可見性”選項卡中,選擇“初始可見性”為“隱藏”,同樣設置值為“=Fields!TitleColumn.Value”的文本框。 7、為了明顯區分郵件標簽列表中的各個項目,可以選中列表框控件,F4調出屬性瀏覽器,設置BorderColor為LightGray,設置BorderStyle為Dashed;另外,為了使報表看起來更美觀,可以在列表框中微調控件的位置。 OK,到此為止,一個郵件標簽報表就設計完成了,其預覽效果如圖8所示。

轉載于:https://blog.51cto.com/zhjjzhjj/469078

總結

以上是生活随笔為你收集整理的报表中Mail Label 的使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。