一. 列印什麼!
-
在做每一個渲染資料表格的查詢出來資料的時候,都涉及一個資料的列印,列印在這幾
天裡面都涉及到,今天呢!就總結一下報表的列印!
-
在圖1裡面就是我要列印的一個表格樣式圖了,當我點選表格的左上角的綠色按鈕的時
候就可以進行一個列印了!
圖1 表格樣式

二. 建立資料集與犯錯點!
-
在列印的時候我們首先就要建立一個資料集才可以,什麼是資料集呢!資料集就是我們一
個包含着資料表的一個對象來的,相當于我們Models裡面的表對資料庫裡面的資料操作一
樣的道理!為什麼現在我要建立一個資料集呢!因為等一下我要在一個報表裡面把資料放
進裡面!
-
在圖2裡面我們可以看到右邊就是一個資料集了,剛開始的時候我們什麼都沒有的,我們
首先點選滑鼠的右鍵添加一個DataTable,添加到了,就會有一個資料集了,但是裡面也是
一個空的資料集,這時我們就要在裡面添加一個資料了,把滑鼠放進表裡面去,然後點選一
下滑鼠右鍵,再次點選添加,就會再次彈出列了,我們就點選一下,就可以添加一個第一個
資料了,這是我們可以把這個列,改一個名稱了,我們隻需要輕按兩下點選一下添加的列的時候
,裡面的列就可以允許我們輸入名稱了,同時頭部的名稱也是一樣的道理,我們也是可以雙
擊點一下就可以進行一個頭部的名稱更改了!
圖2 資料集
3. 在圖2裡面我們也可以看到一個藍色裡面的一個Class這個列裡面我們還可以清晰的看到
左邊的一個資料的下方一個DataType,在這個DataType裡面就是列的對應的一個資料類型
了,而這個就是一個關鍵的地方了,有時候當我們寫完了,當我們列印的時候,卻有些資料
卻不出來,有可能我們查詢的時候和查詢的資料類型不一緻而導緻的,這時候我們就要檢查
一下我們建立的資料類型和你需要查詢出來的資料類型是否一緻,如果是不一樣的話,就可
在DataType這裡更改一下,并且我們查詢出來的資料都是要和這裡的資料類型一緻才可以!
三. 建立報表
1. 我們要選中Reporting裡面的CrystalReports來建立報表,建立好之後,我們首先就要點選
一下管理器裡面的一個資料庫字段的資料庫專家,來添加好我們的寫好的一個資料集了,當我
們選好之後,再按一下确定就可以!
圖3
2. 此時我們在報表裡面就可以清晰的可以看到裡面包含着五部分了,第一個就是一個報表頭,
這個就可用來放一個标題的資訊的,此時我們可以把滑鼠放在報表裡面點選一下滑鼠的右鍵,
這時就會出現一個框,我們再選中第一個的插入,然後又會顯示第二個框了,這時我們就可
以選中一個文本對象了,當你選中文本對象的時候,你就出現和圖4一樣的文本框了,這時
你就可以在标題上方輸入你需要的一個标題了!
圖4
3. 這時我們就可以在一個報表裡面先添加一個我們建立好的一個資料集,怎麼添加呢!我們也
是首先通過滑鼠點住資料庫字段裡面的其中一個字段按住進行一個拖動一直拖,拖到詳細資
料的下方,當我們放手的時候你就會發現我們拖動的時候是一個,而放手的時候就是二個了
其實在頁眉的下方的一個是這一行裡面的一個标題而已,而頁眉的下方才是一個真正的資料
來的!
圖5
4. 當這是我們添加完成後,我們就可以慢慢的進行一個改變了,比如我們想要添加一根線,也是
點選一下滑鼠的右鍵然後再選中插入,這時我們就可以發現裡面有很多内容了,其中裡面就有
着框,項等等!但你點選的時候就會自動地出現的了,并且插入裡面還有些特殊字元,比如打
印的時間等等!都可以添加上去!具體你想要怎樣設計!就不多說了!
四. 列印
-
首先我們要列印的話,還得把要列印的資料查詢出來并且如果是一個多表查詢的話還得要連結清單
查詢同時我們如果要條件查詢的或就可以通過判斷傳過來的值是否有值的了,并且我們就可以
進行一個條件判斷了,在圖6裡面就是一個簡單的查詢資料了!
圖6
2. 接下來就是列印的了,其實列印就分九部分,第一部分DataTable dt = LINQToDataTable(listHerbal)
轉化為DataTable類型!就是把查詢出出來的資料轉化一下類型而已,第二部分PrintReport.ReportDO myDO = new PrintReport.ReportDO()執行個體化資料集!第三部分myDO.Tables[“資料集裡面的資料表的名稱”].Merge(dt);把轉化後DataTable的資料放進資料集裡面的資料表放裡面去!第四部分DistributionReport rp = new DistributionReport();執行個體化報表!第五部分就是:string strRptRath =System.Web.HttpContext.Current.Server.MapPath("~")+“報表的連結”,這個就是擷取到報表的一個連結而以,第六部分rp.Load(strRptRath);把報表連結加載到報表哪裡! 第七部分:
rp.SetDataSource(dt);設定一下報表的資料原!第八部分就是Stream stream = rp.ExportToStream (CrystalDecisions.Shared.ExportFormatType.PortableDocFormat)這個就是轉化為一個IO流的格式!
最後就是傳回去return File(stream, “application/pdf”);一定要傳回的是一種檔案格式!到這一步基本就完成了!如圖7所示!
圖7
3. 關于調用這個方法!你隻需要在視圖這邊寫上一個window.open(),他就可以調用這個方法!
總結:
在這個整一個過程裡面我們第一個注意就是列印的第三部分的了,因為我剛剛寫的時候,不小心寫錯了
一個表的名稱,結果導緻整一個都沒有辦法列印了,細節是一個導緻成功與失敗的關鍵字,在這次總結
裡面去我體會到了對一個列印的每一個過程的細節,并且可以加深了該注意的注意點!同時在這次總結
裡面也希望可以幫助到你!