2012-01-13 2 views

答えて

4

しないでくださいを使用してレポートビューアの印刷ボタンを呼び出すことができます。

最初にユーザーにプレビューを表示せずにレポートをプログラムで印刷します。印刷装置の名前を指定するだけで、ユーザーの介入なしにレポートが自動的に印刷されます。サンプルコードはWalkthrough: Printing a Local Report without Previewです。

+0

しかし、私はレポートビューアコントロールに.rdlcファイルを表示し、カスタムボタンを使用してそのレポートファイルを印刷する必要があります。この問題を解決するには? – user1146956

+0

@ user1146956:ボタンやビューアのコントロールを取り除く必要はありません。しかし、ユーザーの介入なしで*レポート*を印刷したい場合は、上記のリンクのようにしてください。コードを使用してボタンをクリックしないでください。それは決してうまくいかないでしょう。 –

0

私は正常に使用している:

this.reportviewer1.PrintDialog(); 

をすることにより、ユーザは、印刷を制御することができ、印刷ダイアログを示しています。希望は助ける?

+0

ReportViewer1 – monstro

+0

に属するPrintDialog()というメソッドは動作しません。 –

0
directly copy this code in a class called "Printing" and Call the "Run" method with your reportviewer name as parameter. Example obj.Run(reportviewer1); 

//////////////////////////////////////////////////////////////////////////////////// 
using System; 
using System.IO; 
using System.Data; 
using System.Text; 
using System.Drawing; 
using System.Drawing.Imaging; 
using System.Drawing.Printing; 
using System.Collections.Generic; 
using System.Windows.Forms; 
using Microsoft.Reporting.WinForms; 


class Printing 
{ 
private int m_currentPageIndex; 
private IList m_streams; 


    private Stream CreateStream(string name, string fileNameExtension, Encoding encoding, string mimeType, bool willSeek) 
    { 
     Stream stream = new MemoryStream(); 
     m_streams.Add(stream); 
     return stream; 
    } 

    private void Export(LocalReport report) 
    { 
     string deviceInfo = 
      @" 
      EMF 
      8.5in 
      11in 
      0.25in 
      0.25in 
      0.25in 
      0.25in 
     "; 
     Warning[] warnings; 
     m_streams = new List(); 
     report.Render("Image", deviceInfo, CreateStream, 
      out warnings); 
     foreach (Stream stream in m_streams) 
      stream.Position = 0; 
    } 

    private void PrintPage(object sender, PrintPageEventArgs ev) 
    { 
     Metafile pageImage = new 
      Metafile(m_streams[m_currentPageIndex]); 

     // Adjust rectangular area with printer margins. 
     Rectangle adjustedRect = new Rectangle(
      ev.PageBounds.Left - (int)ev.PageSettings.HardMarginX, 
      ev.PageBounds.Top - (int)ev.PageSettings.HardMarginY, 
      ev.PageBounds.Width, 
      ev.PageBounds.Height); 

     // Draw a white background for the report 
     ev.Graphics.FillRectangle(Brushes.White, adjustedRect); 

     // Draw the report content 
     ev.Graphics.DrawImage(pageImage, adjustedRect); 

     // Prepare for the next page. Make sure we haven't hit the end. 
     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(); 
     } 
    } 

    public void Run(ReportViewer rpt) 
    { 
     Export(rpt.LocalReport); 
     Print(); 
    } 

    public void Dispose() 
    { 
     if (m_streams != null) 
     { 
      foreach (Stream stream in m_streams) 
       stream.Close(); 
      m_streams = null; 
     } 
    } 
}