2009-07-27 10 views
0

Ich habe eine Reportviewer und Drucktaste aktiviert haben, aber nicht aktiviert toolbar.Wenn Benutzer drücken Sie die Eingabetaste reportviewer sollte beginnen zu drucken.Es sollte auch nicht druckendialog.Was Code sollte ich in KeyPres schreiben Veranstaltung ?ReportViewer Drucken Wenn gedrückt "Enter" in C#

Antwort

0

This ist, was für mich funktionierte, wenn ich programmatisch von ReportViewer drucken wollte.

Sie sollten den PrintController auf StandardPrintController setzen, um den Druckdialog zu unterdrücken, z.

printDoc.PrintController = new System.Drawing.Printing.StandardPrintController(); 
+0

oki ... ich werde überprüfen ... Danke –

+0

haben Sie Beispielcode dafür –

0

Hier ist mein Code für das manuelle Drucken in Report Viewer. Es ist jedoch in VB.NET. Es verarbeitet das Druckereignis Ihres PrintDocument-Objekts.

Dim m_pageSettings As PageSettings   'Stores page settings for printout 
    Dim m_currentPage As Integer    'Used for index of pages 
    Private m_pages As New List(Of Stream)() 'Stores a stream for each pages 

    'Event fires when printDocument starts printing - reset page index to zero 
    Private Sub PrintDocument1_BeginPrint(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintEventArgs) Handles PrintDocument1.BeginPrint 
    m_currentPage = 0 
    End Sub 

    'Function that prints all the pages included in the report 
    Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage 
    Dim pageToPrint As Stream = m_pages(m_currentPage) 
    pageToPrint.Position = 0 

    Dim pageMetaFile As Metafile = New Metafile(pageToPrint)  'create an image(metafile) of the report page 
    Using (pageMetaFile) 
     'Create a rectangle the size of our report - include margins 
     ' Dim adjustedRect As Rectangle = New Rectangle(_ 
     ' e.PageBounds.Left - CType(e.PageSettings.HardMarginX, Integer), _ 
     ' e.PageBounds.Top - CType(e.PageSettings.HardMarginY, Integer), _ 
     ' e.PageBounds.Width, _ 
     ' e.PageBounds.Height) 

     Dim adjustedRect As Rectangle = New Rectangle(_ 
    e.PageBounds.Left, _ 
    e.PageBounds.Top, _ 
    e.PageBounds.Width, _ 
    e.PageBounds.Height) 

     e.Graphics.FillRectangle(Brushes.White, adjustedRect) 'Fill rectangle with WHITE background 
     e.Graphics.DrawImage(pageMetaFile, adjustedRect)  'Draw report in rectangle - this will be printed 
     m_currentPage = m_currentPage + 1 
     e.HasMorePages = m_currentPage < m_pages.Count   'If more pages are left - keep processing 
    End Using 
    End Sub 

    'Event fires when PrintDocument queries for PageSettings. Return a copy of m_pagesettings. 
    Private Sub PrintDocument1_QueryPageSettings(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.QueryPageSettingsEventArgs) Handles PrintDocument1.QueryPageSettings 
    e.PageSettings = CType(m_pageSettings.Clone, PageSettings) 
    End Sub 

    'Render the report in a EMF - This function creates metafiles(images) of each page in the report 
    Private Sub RenderAllLocalReportPages(ByVal localReport As LocalReport) 
    Dim deviceInfo As String = CreateEMFDeviceInfo() 'Enhanced MetaFile 
    Dim warnings As Warning() = Nothing 
    localReport.Render("IMAGE", deviceInfo, AddressOf LocalReportCreateStreamCallback, warnings) 
    End Sub 

    'Callback function used with RenderAllLocalReportPages 
    Private Function LocalReportCreateStreamCallback(ByVal name As String, ByVal extension As String, ByVal encoding As Encoding, ByVal mimeType As String, ByVal willSeek As Boolean) As Stream 
    Dim stream As New MemoryStream() 
    m_pages.Add(stream) 
    Return stream 
    End Function 

    Private Function CreateEMFDeviceInfo() As String 
    Dim paperSize As PaperSize = m_pageSettings.PaperSize 
    Dim margins As Margins = m_pageSettings.Margins 

    'The device info string defines the page range to print as well as the size of the page. 
    'A start and end page of 0 means generate all pages. 
    Return String.Format(CultureInfo.InvariantCulture, "<DeviceInfo><OutputFormat>emf</OutputFormat><StartPage>0</StartPage><EndPage>0</EndPage><MarginTop>{0}</MarginTop><MarginLeft>{1}</MarginLeft><MarginRight>{2}</MarginRight><MarginBottom>{3}</MarginBottom><PageHeight>{4}</PageHeight><PageWidth>{5}</PageWidth></DeviceInfo>", ToInches(margins.Top), ToInches(margins.Left), ToInches(margins.Right), ToInches(margins.Bottom), ToInches(paperSize.Height), ToInches(paperSize.Width)) 
    End Function 

    'Convert report printing size to inches 
    Private Shared Function ToInches(ByVal hundrethsOfInch As Integer) As String 
    Dim inches As Double = hundrethsOfInch/100.0R 
    Return inches.ToString(CultureInfo.InvariantCulture) & "in" 
    End Function 
0

Ich benutze benutzerdefinierte Berichterstattung für mein Projekt. Benutzerdefiniert bezeichnet den Bericht, der mit dem e.Graphics.DrawString-Typcode erstellt wurde. So

ich machte den Bericht (Codierung) im Standarddruckvorgang von PrintDocument

Hier ist die das Printdocument-Tool ist. Ziehen Sie es auf den Bildschirm und legen Sie es dort ab. Doppelklicken Sie dann darauf, um den Ereignishandler zu erstellen.

Der Code hinter Ereignishandler von PrintDocoument ist:

private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e) 
    { 
     Image image = Properties.Resources.New_Header; 
     Font font = new Font("Arial", 7, FontStyle.Bold); 
     Font font2 = new Font("Arial", 7, FontStyle.Regular); 
     float fontHeight = font2.GetHeight(); 
     e.Graphics.DrawImage(image, 20, 5, 260, 130); 
     e.Graphics.DrawString("Date:" + DateTime.Now.ToShortDateString(), new Font("Arial", 7, FontStyle.Bold), Brushes.Black, new Point(20, 160)); 
     e.Graphics.DrawString("Invoice#: "+InvoiceNoTextBox.Text, new Font("Arial", 7, FontStyle.Bold), Brushes.Black, new Point(160, 160)); 
     e.Graphics.DrawString("Client Name: " + ClientNameTextBox.Text.Trim(), new Font("Arial", 7, FontStyle.Bold), Brushes.Black, new Point(20, 180)); 
     e.Graphics.DrawString("______________________________", 
      new Font("Arial", 12, FontStyle.Regular), Brushes.Black, new Point(20, 190)); 
     e.Graphics.DrawString("Product", new Font("Arial", 7, FontStyle.Bold), Brushes.Black, new Point(23, 220)); 
     e.Graphics.DrawString("U/Price", new Font("Arial", 7, FontStyle.Bold), Brushes.Black, new Point(170, 220)); 
     e.Graphics.DrawString("Qty", new Font("Arial", 7, FontStyle.Bold), Brushes.Black, new Point(210, 220)); 
     e.Graphics.DrawString("Total", new Font("Arial", 7, FontStyle.Bold), Brushes.Black, new Point(240, 220)); 
     e.Graphics.DrawString("______________________________", 
      new Font("Arial", 12, FontStyle.Regular), Brushes.Black, new Point(20, 220)); 

     int CurrentX = 25; 
     int CurrentY = 230; 
     int offset = 20; 
     foreach (var i in shoppingCart) 
     { 
      e.Graphics.DrawString(i.ItemName, new Font("Arial", 7, FontStyle.Regular), Brushes.Black, new Point(CurrentX, CurrentY+offset)); 
      e.Graphics.DrawString(i.UnitPrice.ToString(), new Font("Arial", 7, FontStyle.Regular), Brushes.Black, new Point(180, CurrentY + offset)); 
      e.Graphics.DrawString(i.Quantity.ToString(), new Font("Arial", 7, FontStyle.Regular), Brushes.Black, new Point(215, CurrentY + offset)); 
      e.Graphics.DrawString(i.TotalPrice.ToString(), new Font("Arial", 7, FontStyle.Regular), Brushes.Black, new Point(240, CurrentY + offset)); 
      offset = offset + (int)fontHeight + 5; 

     } 
     CurrentY = CurrentY+offset; 
     e.Graphics.DrawString("______________________________", 
      new Font("Arial", 12, FontStyle.Regular), Brushes.Black, new Point(20, CurrentY-5)); 
     e.Graphics.DrawString("Total Amt: Rs." + TotalAmountTextBox.Text, new Font("Arial", 7, FontStyle.Regular), Brushes.Black, new Point(180, CurrentY + 35)); 
     e.Graphics.DrawString("Discount%: " + DiscountTextBox.Text.Trim()+"%", new Font("Arial", 7, FontStyle.Regular), Brushes.Black, new Point(180, CurrentY + 50)); 
     e.Graphics.DrawString("Discount: Rs." + JustDiscountTextBox.Text.Trim(), new Font("Arial", 7, FontStyle.Regular), Brushes.Black, new Point(180, CurrentY + 65)); 
     e.Graphics.DrawString("Grand Total: Rs." + TotalToPayTextBox.Text, new Font("Arial", 7, FontStyle.Regular), Brushes.Black, new Point(180, CurrentY + 80)); 
     e.Graphics.DrawString("Advance: Rs." + AdvancePaymentTextBox.Text.Trim(), new Font("Arial", 7, FontStyle.Regular), Brushes.Black, new Point(20, CurrentY + 95)); 
     e.Graphics.DrawString("Cash: Rs." + givenCash.Text.Trim(), new Font("Arial", 7, FontStyle.Regular), Brushes.Black, new Point(180, CurrentY + 95)); 
     e.Graphics.DrawString("Pending: Rs." + PendingPaymentTextBox.Text, new Font("Arial", 7, FontStyle.Regular), Brushes.Black, new Point(20, CurrentY + 110)); 
     e.Graphics.DrawString("Return: Rs." + ReturnTextBox.Text, new Font("Arial", 7, FontStyle.Regular), Brushes.Black, new Point(180, CurrentY + 110)); 
     e.Graphics.DrawString("Software Provided By Muhammad Abbas", new Font("Arial", 7, FontStyle.Regular), Brushes.Black, new Point(20, CurrentY + 125)); 
     e.Graphics.DrawString("Mob:0304-9550308", new Font("Arial", 7, FontStyle.Regular), Brushes.Black, new Point(20, CurrentY + 140)); 

    } 

    private void PrintPreviewButton_Click(object sender, EventArgs e) 
    { 
     try 
     { 
      printPreviewDialog1.Document = printDocument1; 
      printPreviewDialog1.ShowDialog(); 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 

    } 

und schließlich die Antwort von Ihnen Frage. Verwenden Sie dies in Ihrem Formular KeyDown Ereignis.

private void Form_KeyDown(object sender, KeyEventArgs e) 
    { 
     if (e.KeyCode == Keys.Enter) 
     { 
      printDocument1.Print(); 
     } 
    } 

Es wird direkt drucken Ihre Quittung von Ihrem Drucker.

Verwandte Themen