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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

打印水晶报表

發布時間:2023/12/3 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 打印水晶报表 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
開發工具與關鍵技術:Visual Studio、MVC 作者:幻奏 撰寫時間:2019.5.8

我們在日常生活中常常會打印很多東西,所以我打算講一下是怎么打印水晶報表的。
打印水晶報表其實和導出差不多,只是有一點不同。打印也用到了多條件查詢,我們也要把數據處理一下。
獲取查詢條件

判斷數據不能為或undefined,然后賦值。

打開下載窗口,拼接查詢到的數據到下載路徑。

這樣視圖的部分就寫完了,控制器那邊我們先創建一個數據源,創建文件夾,然后添加新建項。在打開的窗口的左邊選擇數據,之后在右邊選擇數據集,

改名,然后添加。
打開我們新建的那個東西,右鍵,我們有兩種添加數據源的方法,一種是和數據庫連接。另一種是自己創建數據表。在這里我們選擇第二個DataTable(D),因為我的數據庫沒有我要的表,所以我們要自己創建。添加了之后我們要給表一個名字,然后添加列,添加完列之后我們在列的那里右鍵,屬性,這里很重要,每個字段的數據類型都要和數據庫的一樣,要不然會導不進數據的。
搞完了之后我們要安裝CrystalReportViewer才會有我下面選中的那個選項。

同樣改名,添加。然后它就會彈出一個窗口,我們選擇一個空白的報表,好了后我們在左邊的數據庫字段那里右鍵,然后選中自己創建的那張表。

確定了之后就是設計模板,這我就不說了。我們現在要寫控制器那里了。
先寫多條件查詢,然后篩選(這里不說了)
將查詢出來的數據轉化為DataTable的格式,然后下面又是打印水晶報表的固定寫法了。
1、 實例化數據集
2、 把數據放入數據集中自己創建的那個表格
3、 實例化數據報表
4、 獲取報表的路徑(自己設計的那個模板)
5、 將報表加載到模板中
6、 設置報表的數據源
7、 將報表轉化為文件流輸出
最后返回文件到頁面。

由于上面用到了LINQToDataTable這個方法,所以我們要寫一下,不過也是固定的寫法,它主要是把我們查詢出來的數據傳到這個方法里面,就會返回DataTable的格式。
下面看下這個方法的代碼:

public DataTable LINQToDataTable<T>(IEnumerable<T> varlist){//定義要返回的DataTable對象DataTable dtReturn = new DataTable();//保存列集合的屬性信息數組PropertyInfo[] oProps = null;if (varlist == null)return dtReturn;//安全性檢查//循環遍歷集合,使用反射獲取類型的屬性信息foreach (T rec in varlist){//使用反射獲取T類型的屬性信息,返回一個PropertyInfo類型的集合#regionif (oProps == null){oProps = ((Type)rec.GetType()).GetProperties();//循環PropertyInfo數組foreach (PropertyInfo pi in oProps){//得到屬性的類型Type colType = pi.PropertyType;//如果屬性為泛型類型if ((colType.IsGenericType) && (colType.GetGenericTypeDefinition() == typeof(Nullable<>))){//獲取泛型類型的參數colType = colType.GetGenericArguments()[0];}//將類型的屬性名稱與屬性類型作為DataTable的列數據dtReturn.Columns.Add(pi.Name, colType);}}#endregion//新建一個用于添加到DataTable中的DataRow對象DataRow dr = dtReturn.NewRow();//循環遍歷屬性集合foreach (PropertyInfo pi in oProps){//為DataRow中的指定列賦值dr[pi.Name] = pi.GetValue(rec, null) == null ? DBNull.Value : pi.GetValue(rec, null);}//將具有結果值的DataRow添加到DataTable集合中dtReturn.Rows.Add(dr);}return dtReturn;//返回DataTable對象}

代碼就是這樣了,下次你們用的時候直接復制過去就行了,這時水晶報表已經有數據了,這樣就OK了,打印水晶報表其實并不復雜,大多數多是固定的寫法,我們只要設計好它的模板就行了。

總結

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

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