日期:2014-05-20 浏览次数:20934 次
http://msdn.microsoft.com/zh-cn/library/ms252091(v=VS.90).aspx
using System; using System.IO; using System.Data; using System.Text; using System.Drawing.Imaging; using System.Drawing.Printing; using System.Collections.Generic; using System.Windows.Forms; using Microsoft.Reporting.WinForms; using System.Data.SqlClient; public class Demo : IDisposable { private int m_currentPageIndex; private IList<Stream> m_streams; private DataTable LoadSalesData() { string conn = "server=192.168.0.70;database=his;user id =sa;pwd=sqlsa2002"; SqlConnection con = new SqlConnection(conn); SqlCommand cmd = new SqlCommand("SELECT balance,total FROM mem_ac where code ='100000000001'", con); SqlDataAdapter adp = new SqlDataAdapter(); adp.SelectCommand = cmd; con.Open(); DataTable dt = new DataTable(); adp.Fill(dt); con.Close(); return dt; } // Routine to provide to the report renderer, in order to // save an image for each page of the report. private Stream CreateStream(string name, string fileNameExtension, Encoding encoding, string mimeType, bool willSeek) { Stream stream = new MemoryStream(); m_streams.Add(stream); return stream; } // Export the given report as an EMF (Enhanced Metafile) file. private void Export(LocalReport report) { string deviceInfo = @"<DeviceInfo> <OutputFormat>EMF</OutputFormat> <PageWidth>8.5in</PageWidth> <PageHeight>11in</PageHeight> <MarginTop>0.25in</MarginTop> <MarginLeft>0.25in</MarginLeft> <MarginRight>0.25in</MarginRight> <MarginBottom>0.25in</MarginBottom> </DeviceInfo>"; Warning[] warnings; m_streams = new List<Stream>(); report.Render("Image", deviceInfo, CreateStream, out warnings); foreach (Stream stream in m_streams) stream.Position = 0; } // Handler for PrintPageEvents private void PrintPage(object sender, PrintPageEventArgs ev) { Metafile pageImage = new Metafile(m_streams[m_currentPageIndex]); m_currentPageIndex++; ev.HasMorePages = (m_currentPageIndex < m_streams.Count); } private void Print() { if (m_streams == null || m_streams.Count == 0) throw new Exception("Error: no stream to print."); PrintDocument printDoc = new PrintDocument(); if (!printDoc.PrinterSettings.IsValid) { throw new Exception("Error: cannot find the default printer."); } else { printDoc.PrintPage += new PrintPageEventHandler(PrintPage); m_currentPageIndex = 0; printDoc.Print(); } } // Create a local report for Report.rdlc, load the data, // export the report to an .emf file, and print it. private void Run() { LocalReport report = new LocalReport(); report.ReportPath = @"..\..\Report.rdlc"; ReportParameter[] rp = new ReportParameter[10]; rp[0] = new ReportParameter("RegNumber", "0000286872"); rp[1] = new ReportParameter("DossierNumber", "122755"); rp[2] = new ReportParameter("ShowDate", "2011年5月9日"); rp[3] = new ReportParameter("Number", "9155000635"); rp[4] = new ReportParameter("PatientName", "陈颖"); rp[5] = new ReportParameter("PaymentType", "银行卡"); rp[6] = new ReportParameter("MoneyCapital", "this.GetNumToUpper(Money1)"); rp[7] = new ReportParameter("Money", "Money1.ToString()"); rp[8] = new ReportParameter("Departments", "呼吸内科16病房"); rp[9] = new ReportParameter("Operator", "张三丰"); report.SetParameters(rp); Export(report); Print(); } public void Dispose() { if (m_streams != null) { foreach (Stream stream in m_streams) stream.Close(); m_streams = null; } } public static void Main(string[] args) { using (Demo demo = new Demo()) { demo.Run(); } } }