当前位置: 代码迷 >> .NET报表 >> MicrosoftReportViewer 直接打印有关问题!
  详细解决方案

MicrosoftReportViewer 直接打印有关问题!

热度:7474   发布时间:2013-02-25 00:00:00.0
MicrosoftReportViewer 直接打印问题【急】!!
各位大哥大姐大叔大侠帮帮忙!

MicrosoftReportViewer 我想直接打印 
在微软MSDN上看到一个例子
C# code
http://msdn.microsoft.com/zh-cn/library/ms252091(v=VS.90).aspx



下面是我的代码,我参照MSDN上面修改的,已经有Report.rdlc 都设置好了。Report.rdlc里控件的值都是用参数传入的。
C# code
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();        }    }}