2011-06-08 85 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

相关问题