本文假設讀者對Visual Studio 2005 IDE有初步的了解,並且能夠用C#編寫代碼。他們是否理解MS Reporting Services並不重要。當然,之前寫類似的報告會幫助妳更快上手。好了,卷起袖子準備開始吧!
請看圖1。這份報告有多復雜?猜猜要多久才能完成?就復雜程度而言,它只是壹個簡單的,來自north wind->;從產品中提取的報告(SQL Server 2000);就時間而言,我相信不會花妳整整壹個小時。
圖1
接下來,我們開始創建報告。首先,我們應該編寫壹個C# applet來生成報告。
步驟1:創建壹個Windows應用程序。
選擇文件菜單,新建-項目,從項目類型中選擇C#,從右側對話框中選擇Windows應用程序;在名稱欄中,最好使用表明程序用途的名稱;在“位置”列中,記下您想要保存的目錄。完成後,項目中會有壹個Form1,我們就從它的表單設計器開始。
按如下方式修改Form1的屬性。當然,您也可以根據個人喜好修改其他屬性:
表單1。Text = "帶智能客戶端的MS Reporting Services 101 "
表單1。尺寸= 750,300
步驟2:向窗體中添加壹個crystalreportviewer。
什麽是crystalreportviewer?就像看DVD需要DVD播放器壹樣,我們需要壹個crystalreportviewer來預覽報告。
對於第壹次寫報表的人來說,crystalreportviewer可以說是賦予了報表生命。它不僅可以預覽輸出,還可以幫助生成各種格式(PDF或Excel等)的報告信息。)並打印出來。
請按照以下步驟將crystalreportviewer控件放置在Form1上:
依次找到工具箱-數據-crystalreportviewer,拖動到Form1。這將創建壹個名為reportViewer1的新實例。
通過設置reportViewer1。Dock = Fill,crystalreportviewer將填充表單的整個區域以顯示報告。
完成第壹步和第二步後,項目應該如圖2所示:
圖2
步驟3:為項目添加數據集。
數據集帶有crystalreportviewer。它保存並提供來自數據源的原始數據,我們可以在C#程序中處理或輸出這些數據。
按照以下步驟添加數據集:
從解決方案資源管理器中選擇Add-New Project-Dataset,將其名稱DataSet1修改為dsProduct,然後單擊Add完成。
向新創建的數據集中添加數據表。數據表本質上是用來加載報表數據的,設計報表時會用到DataSet/DataTable中的相關信息。
下面是添加壹個數據表到壹個數據集(dsProduct):
從解決方案資源管理器中雙擊dsProduct,設計視圖將打開,右鍵單擊並選擇Add-Datasheet。然後,單擊標題將名稱更改為dtProductList,如圖3所示:
圖3
接下來,開始向數據表(dtProductList)添加列,此時的設計視圖應該如圖4所示。右鍵單擊dtProductList並選擇添加-列。
圖4
重復上述步驟,添加以下內容:
產品名稱(字符串)
QuantityPerUnit(字符串)
單價(雙倍)
單位庫存(雙精度)
UnitValue (Double):基於UnitsInStock * UnitPrice的計算字段。
添加列時,默認為字符串數據類型。添加後,請轉到屬性窗口,將相應的列修改為Double類型。
請看圖5。現在數據表應該是這樣的。同時,還可以查看屬性窗口來修改數據類型。
圖5
步驟4:為項目添加報告。
到目前為止,我們已經創建了項目,添加了crystalreportviewer和數據集;現在,是時候創建壹個整潔漂亮的報表了。
需要按照以下步驟生成報告(rptProductList.rdlc ):
從解決方案資源瀏覽器中選擇“添加-新建項目-報表”,將Report1.rdlc的名稱更改為rptProductList.rdlc,然後單擊“添加”完成。
該項目可能如圖6所示;添加報表後,您可以開始使用數據集進行設計。
圖6
無論是第壹次設計報表的新手,還是老手,都必須處理好以下三個基本的報表區域:表頭(或表頭)、表尾、表體。壹般來說,設計報告的時候要有草稿,比如紙張有多大,怎麽排版等等。,通常是信紙大小,豎排。當然,如果妳能在開始工作前在紙上畫個草圖就更好了。可以回頭看圖1。在頁眉中,報告名稱和日期已經可用,在表體中,有壹個產品相關信息的列表,在頁腳中,有頁碼。
讓我們從標題開始。向項目中添加新報表時,默認情況下,在報表設計器中只能看到表體。在報表設計器的表體外部右鍵單擊,然後選擇表頭。這樣會給報表增加壹個表頭,妳可以隨意調整表頭的高度和表體區域。請看圖7,降低了表體高度,增加了表頭高度。
圖7
在報表設計器的工具箱中,可以看到用於設計報表的各種控件。在我們的例子中,我們將使用文本框、線條和表格控件。現在我們開始設計頁眉。拖動兩個文本框,並將它們放在標題區域。文本框可以顯示靜態和動態數據,而行控件用於分隔頁眉和正文區域。放置控件後,我們可以修改它們的屬性來顯示我們需要的值。例如,我們可以指定壹個文本框作為報告標題,另壹個文本框顯示當前日期。選擇文本框後,可以直接在其中輸入靜態文本。
請修改標題文本框,如下所示:
Value = "產品列表"
顏色=紫色
日期文本框被修改為:
Value = "運行數據:" & amp今天
顏色=紫色
[span]需要註意的是,日期文本框的Value屬性以符號“=”開頭,這意味著它不是壹個簡單的靜態文本,而是壹個表達式,是字符串“運行日期”和今天的VB.NET腳本的結果。
此外,您可以為報告中的所有對象指定任意名稱。通常,對於大多數控件,保留默認名稱是好的。這裏,標題文本框的名稱(即name屬性)被指定為“txtTitle”。
參考圖8,在標題設計完成後,它應該看起來像這樣:
圖8
現在是身體。表體是承載信息的明細區域,是整個報表最重要的部分。可以看到,當報表添加到項目中時,表體是自動添加的,我們只需要在上面放壹些控件就可以了。
傳統上,body區域用於顯示詳細數據(在本例中是產品信息),它通常是多行信息。隨著報表上數據的增加,正文面積會相應擴大,但壹般來說,報表只會設計成壹頁紙(信紙或A4紙大小)。
在表體區域,有三個最常用的控件:表格、矩陣和列表。在本例中,將使用表格控件。在報表設計界面,在表體區域拖拽表格控件,妳會看到這會生成壹個三行三列的表格,中間壹列已經標記為:表頭、表體、表尾。
當妳知道表格控件只是壹堆TextBox的組合時,是不是有點驚訝?順便說壹下,表格中的每個單元格都和文本框壹樣,也就是說,您可以在其中輸入靜態文本或指定動態表達式。
在開始設計表體區域之前,記得再添加兩列(我們的報告中有五列)。添加列非常簡單,只需遵循以下步驟:
1.在表體區域選擇表格控件。
2.左鍵單擊最右邊壹列的標題(假設您正在從右邊添加壹個新列)。
3.右鍵單擊標題並選擇“在右側插入列”。
現在,報告應該如圖9所示。您可以根據列中的數據隨意調整列的寬度。
圖9
妳們大多數人都用過Excel或者類似的東西。您可以將Table控件視為壹個迷妳工作表,在其中您可以選擇邊框類型、更改任何單元格的字體等等。所以,需要做的就是按照之前想象的格式來設計表格。
讓我們從第壹列開始,後面的每壹列都是壹樣的。單擊頂部單元格,依次輸入:
標頭1:"產品名稱"
標題2:“包裝”
標題3:“單價”
標題4:“庫存單位”
標題5:“股票價值”
在下壹個詳細數據區域(上壹個細節),您需要輸入壹個表達式,它是dsProduct.dtProductInfo中的壹列,在這裏,您可以手動輸入表達式,也可以從數據源工具箱中拖放它(參見圖7的左側)。
如果要手動輸入,請從數據區域的第壹列到最後壹列,單擊單元格並輸入:
detail 1:" =字段!ProductName。價值"
細節2:" =字段!QuantityPerUnit。價值"
細節3:" =字段!UnitsInStock。價值"
細節4:" =字段!單價。價值"
細節5:" =字段!UnitsInStock。值*字段!單價。價值"
請註意細節5,這是庫存單位和單位價值相乘後的輸出。另外提醒壹下,如果將列拖到表格控件中的數據區,如果表頭為空,會自動添加表頭。
最後,在表格控件的表尾添加壹個累計列,在表體區域選擇第4列和第5列的表尾單元格,輸入:
單元格4:“總值:”
單元格5: "= sum(字段!UnitsInStock。值*字段!單價。值)”
單擊單元格5,它使用內置的SUM()函數來獲取累積結果。
最後只剩下頁腳區域。在開始寫壹些C#代碼之前,需要完成報表的頁腳,就像前面添加報表表頭壹樣。在打開的報表設計器中,右鍵單擊並選擇頁腳,如圖7所示。
將Line和TextBox控件拖到頁腳區域,並在TextBox中輸入以下表達式:
value:= " Page:" & amp;全局!頁碼& amp“/”& amp;全局!總頁數
如您所見,這裏使用了PageNumber和TotalPages,它們都是全局變量。
現在,報告應該如圖10所示。在這裏,顏色改變了壹點。將數字數據向右對齊,並將表格視為Excel工作表。妳可以隨意調整成妳想要的樣子。
圖10
快好了!剩下的就是表達式生成器了。表達式生成器是Reporting Services中非常強大的工具。如圖11所示,股票價值由SUM函數計算,DateSet中的所有數據都可以用“Fields!”關鍵字訪問。
圖11
步驟5:編寫賦予報表生命力的C#代碼。
從解決方案資源管理器中,選擇Form1,右鍵單擊並選擇“查看代碼”,為Form1_Load添加以下代碼:
使用系統。Data . SqlClient
使用微軟。報表. WinForms
私有void Form1_Load(對象發送方,EventArgs e)
{
//聲明連接字符串
string cnString = @ "(本地);初始目錄= northwind+"用戶Id = northwind密碼= north wind ";
//如果使用標準安全屬性,請改為下面的代碼。
//string cnString = @ "數據源=(本地);初始目錄= northwind綜合安全= SSPI”;
//聲明連接、命令對象和其他相關對象。
SqlConnection con report = new SqlConnection(cnString);
SqlCommand cmd report = new SqlCommand();
SqlDataReader drReport
數據集ds report = new ds product();
嘗試
{
//打開連接
報告內容。open();
//準備連接對象,將獲取的數據放入數據集中。
cmdReport。CommandType = CommandType。文本;
cmdReport。Connection = conReport
cmdReport。CommandText = " Select TOP 5 * FROM Products Order By product name ";
//從命令對象讀取數據
drReport = cmdReport。ExecuteReader();
//使用ADO.NET,可以將讀取的數據直接加載到數據集中。
dsReport。表格[0]。load(dr report);
//關閉讀取和連接
drReport。close();
報告內容。close();
//為查看者提供本地報表數據。
rpvAbraKaDabra。local report . ReportEmbeddedResource =
”rswin 101 . rptproductlist . rdlc”;
//準備報表數據源
report data source rds = new report data source();
rds。name = " ds product _ dt product list ";
rds。Value = dsReport。表[0];
rpvAbraKaDabra。local report . data sources . add(rds);
//加載crystalreportviewer。
rpvAbraKaDabra。refresh report();
}
catch(例外ex)
{
//顯示錯誤消息
MessageBox。顯示(例如。消息);
}
最後
{
//檢查連接是否仍然打開,如果是,則關閉它。
if (conReport。State == ConnectionState。打開)
{
報告內容。close();
}
}
}
看到這裏,您可能想知道為什麽在select查詢語句中使用“TOP 5”。這只是為了演示,輸出僅限於得到如圖1所示的累積結果。另外,ReportDataSource的Name屬性應該始終為“DataSet_DataTable”。
湖北新藍海是專註於網絡營銷和網絡推廣的龍頭企業,曾為武漢建民、華工激光、江西仁和等多家知名企業提供網絡營銷外包服務。詳情請在各大搜索引擎搜索“湖北新藍海”。