C#学习教程:不带预览的打印ReportViewer报告查看器充满了来自我的数据库的数据,它显示我点击了打印按钮,它打印了……但是,我的客户不想点击这个按钮,他想自动打印。当我调用ReportViewer时,它无需单击按钮即可自行打印。谁能告诉我我是怎么做到的?我尝试了工具箱中的reportviewer1.print和PrintDocument。但我不知道如何正确使用这些。谢谢你的注意!我有同样的问题,这是我使用的代码,工作就像一个恶魔!使用System.IO;使用系统文本;使用System.Globalization;使用系统绘图;使用System.Drawing.Imaging;使用System.Drawing.Printing;使用Microsoft.Reporting.WinForms;使用System.Collections.Generic;使用System.Collections.Specialized;使用系统诊断;使用System.ComponentModel;使用系统数据;使用System.Linq;使用System.Threading.Tasks;使用System.Windows.Forms;namespaceNewLabelPrinter{//////ReportPrintDocument将打印ServerReport或LocalReport的所有页面。///构建打印文档时呈现页面。构造完成后,///在此类上调用Print()以开始打印。///类AutoPrintCls:PrintDocument{privatePageSettingsm_pageSettings;私有intm_currentPage;私有列表m_pages=newList();publicAutoPrintCls(ServerReportserverReport):this((Report)serverReport){RenderAllServerReportPages(服务器报告);}publicAutoPrintCls(LocalReportlocalReport):this((Report)localReport){RenderAllLocalReportPages(localReport);}privateAutoPrintCls(Reportreport){//将页面设置设置为报告中定义的默认值ReportPageSettingsreportPageSettings=report.GetDefaultPageSettings();//页面设置对象将使用默认打印机,除非//PageSettings.PrinterSettings被更改。这假设有//是默认打印机。m_pageSettings=newPageSettings();m_pageSettings.PaperSize=reportPageSettings.PaperSize;m_pageSettings.Margins=reportPageSettings.Margins;}protectedoverridevoidDispose(booldisposing){base.Dispose(disposing);if(disposing){foreach(Streamsinm_pages){s.Dispose();}m_pages.Clear();}}protectedoverridevoidOnBeginPrint(PrintEventArgse){base.OnBeginPrint(e);m_currentPage=0;}protectedoverridevoidOnPrintPage(PrintPageEventArgse){base.OnPrintPage(e);强度eampageToPrint=m_pages[m_currentPage];pageToPrint.Position=0;//将每个页面加载到图元文件中以进行绘制。使用(MetafilepageMetaFile=newMetafile(pageToPrint)){RectangleadjustedRect=newRectangle(e.PageBounds.Left-(int)e.PageSettings.HardMarginX,e.PageBounds.Top-(int)e.PageSettings.HardMarginY,e.PageBounds.Width,e.PageBounds.Height);//为报告绘制白色背景e.Graphics.FillRectangle(Brushes.White,adjustedRect);//绘制报表内容e.Graphics.DrawImage(pageMetaFile,adjustedRect);//准备下一页。确保我们没有走到尽头。m_currentPage++;e.HasMorePages=m_currentPage0){m_pages.Add(pageStream);pageStream=serverReport.Render("IMAGE",deviceInfo,nonFirstPageParameters,outmimeType,outfileExtension);}}catch(Exceptione){MessageBox.Show("可能缺失信息::"+e);}}privatevoidRenderAllLocalReportPages(LocalReportlocalReport){try{stringdeviceInfo=CreateEMFDeviceInfo();警告[]警告;localReport.Render("IMAGE",deviceInfo,LocalReportCreateStreamCallback,outwarnings);}catch(Exceptione){MessageBox.Show("error::"+e);}}privateStreamLocalReportCreateStreamCallback(stringname,stringextension,Encodingencoding,stringmimeType,boolwillSeek){MemoryStreamstream=newMemoryStream();m_pages.Add(流);返回流;}privatestringCreateEMFDeviceInfo(){PaperSizepaperSize=m_pageSettings.PaperSize;边距margins=m_pageSettings.Margins;//设备信息字符串定义要打印的页面范围以及页面的大小。//起始页和结束页均为0表示生成所有页面。返回string.Format(CultureInfo.InvariantCulture,"emf00{0}{1}{2}{3}{4}{5}",ToInches(margins.Top),ToInches(margins.Left),ToInches(margins.Right),ToInches(margins.Bottom),ToInches(paperSize.Height),ToInches(paperSize.Width));}私有静态字符串ToInches(inthundrethsOfInch){双英寸=hundrethsOfInch/100.0;返回inches.ToString(CultureInfo.InvariantCulture)+"in";}}}这个类是完全满足你的需求的,你需要做的就是:autoprintme.Print();嘿presto它打印只需将此附加到代码中的方法(可能在加载报告之后。)你就可以开始了!选项:(未经测试)发现这会打印到默认打印机,要更改打印机,您可以执行以下操作:}未测试,因为我不再有任何源代码来测试这个如果我的CrystalReport答案不适合你,你也可以试试这个页面。同样,我还没有测试过它,也不知道它是否有效,但它看起来像是一种可能有效的完全不同的方法。如果没有,那么不幸的是我帮不上什么忙。这就是我们使用CrystalReports的方式。ReportDocumentrd=newReportDocument();//在此处插入代码以运行报表//这将获取要打印到的用户默认打印机。PrintDialogprt=newPrintDialog();rd.PrintOptions.PrinterName=prt.PrinterSettings.PrinterName;/这是printing.rd.PrintToPrinter(copies,true,1,1000);我认为对应的PrintOptions.PrinterName是ReportViewer.PrinterSettings,但我怀疑你真正需要的是PrintToPrinter()的等价物,我在.以上就是C#学习教程:打印ReportViewer共享的所有内容,不带预览。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。涉及侵权,请点击维权联系管理员删除。如需转载请注明出处:
