2011-06-08 115 views
2

我有一個C#4.0的WinForm,點擊打印按鈕。在Form Load事件中,我填充一個自定義對象並將該對象粘貼到該對象的列表中。該對象直接映射到RDLC作爲數據源,如果使用報告查看器,則可以看到我的RDLC文件正確填充。我在MSDN上找到了一個鏈接來執行此操作(http://msdn.microsoft.com/en-us/library/ms252091.aspx),但它在Export方法上爆炸了。打印RDLC文件時不顯示打印預覽窗體按鈕點擊

有誰知道如何打印RDLC文件的任何很好的例子,而無需使用的ReportViewer預覽文件?我只想打一個按鈕,並將我的列表綁定到RDLC文件(我已經工作)並直接打印到打印機。

有什麼想法?

回答

2

好了,所以在Walkthrough: Printing a Local Report without Preview該鏈接實際上是我需要打印一個RDLC文件時彈出的打印對話框中很好地工作。我犯的錯誤是我的ReportDataSource。如示例中所示,MSDN將其ReportDataSource的名稱命名爲「Sales」,該名稱與RDLC XML代碼中的DataSet的名稱相匹配。我犯了一個錯誤,將我的ReportDataSource命名爲「Sale」,導致兩者不同步並且無法打印。

問題解決!

+0

哎喲 - 這樣做。恭喜你弄明白了! – Ennael 2011-06-27 03:12:14

+0

我遇到了來自MSDN的示例代碼的問題。一切正常,如果我點擊我的打印按鈕(即執行代碼frmo樣本),但當我嘗試再次點擊打印時(在10秒左右),我收到一條消息,說在CreateStream方法中生成的EMF文件正在使用中(該進程無法訪問文件'Sales.EMF',因爲它正在被另一個進程使用),並且我得到一個IOException。我怎樣才能避免這種情況?我將讓我的用戶打印項目比可以從鎖釋放文件更快。 – Shafique 2011-06-27 20:33:57

+0

好吧修好了。問題在於MSDN的例子是一個單獨的類,它意味着要執行一次並且實現了IDisposable。在我的情況下,我讓這個類成爲一個幫助文件,我爲每個表單加載實例化一次,所以Dispose()永遠不會被調用,直到表單的生命週期結束。因此,我沒有實現IDisposable,而是使Dispose()方法變爲私有,並在Print()執行後直接調用它。這樣,我Dispose()生成的流,我不會得到IOExceptions。 – Shafique 2011-06-27 21:28:28