本文基本借鑑了用wpf實現列印及列印預覽
wpf的文件使用基本使用文件模版flow document,但是單獨的flow document(流文件)是沒法預覽的,你必須把它放在乙個容器中才可以,流文件的容器有flowdocumentscrollviewer,flowdocumentpageviewer,flowdocumentreader,另外還有documentviewer,這個只支援固定流文件(唯讀)。
本次部落格就決定介面使用documentviewer,documentviewer有很好的分頁功能,我們只需要生成固定文件(xps),然後交給它,它就能很好的將內容預覽出來。
班級
但最大的問題來了:流文件的table的行數是固定的,流文件上的物件是靜態的,所以我們只能用後台**來手工改變它了,這是相當不方便的地方……我定義了這麼乙個介面來做這種工作。
public inte***ce idocumentrenderer
就比如我下面需要獲取班級所有學生各門成績
name
idchinese
math
定義乙個繼承idocumentrenderer介面的類,實現render方法
public class classdocumentrender : idocumentrenderer
}}
先定義乙個能接受流文件與idocumentrenderer介面的方法。這裡的datacontext必須要有,因為流文件中的資料都是以binding形式寫的,ui只是用來顯示資料的,而不是儲存資料的。
public flowdocument loaddocumentandrender(string strtmplname, object data, idocumentrenderer renderer = null)
return doc;
}
定義乙個載入流文件的方法
public void loadxps(flowdocument flowdoc)
這是列印預覽**,然後你可以從介面上documentview上的列印按鈕來列印
async task showmyclass(myclass myclass)
private async taskgetclassreportdata(myclass myclass)
這是多選班級列印,直接跳到微軟的列印介面,我當時其實想的是弄個佇列,然後乙個乙個列印,後來檢查了printdialog類之後發現不用了,它內部實現其實就有printqueue,本身內部就有個佇列來維護先後順序的,那麼我們直接呼叫printdocument方法就可以了
private async void printbtn_click(object sender, routedeventargs e)
}}
wpf 基於模板的報表設計及列印預覽
wpf 中可以使用reportingservers 水晶報表等東西,但是如果使用reportingservers 在頻繁的資料互動中是 比較浪費資源或者存在效率問題。所以還有沒有更好的辦法呢。答案肯定是有的。wpf中基於模板的報表設計就可以完成以上內容,對於要修改的報表檔案是以檔案的方式存放在伺服器...
DataGrid的列印預覽和列印
using system using system.drawing using system.collections using system.componentmodel using system.windows.forms using system.data using system.data....
C 列印預覽
截圖 本來想用.net提供的列印預覽對話方塊,可終究不如自己寫的用起來方便,比如說新增滑鼠和滾輪支援。在.net環境下實現列印和預覽還是蠻簡單的。需要用到的類是printdocument和printpreviewcontrol printdocument是要列印的文件,printpreviewcon...