تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
[VB.NET] تعديل بسيط في الطباعة المباشرة فقط ReportViewer
#18
(15-08-16, 08:59 PM)sniperjawadino كتب : نعم أخي حريف البرمجة

الكل جاهز التقرير و الهوامش و قياس التقرير و نوع الطابعة
ينقسني فقط الطباعة المباشرة لإختزال الوقت

شكرا أخي

انشاء كلاس جديد باسم (Reporting)

كود :
مسح الموجود داخل الكلاس كامل ولصق الكود التالي به

Imports System.IO
Imports System.Data
Imports System.Text
Imports System.Drawing.Imaging
Imports System.Drawing.Printing
Imports System.Collections.Generic
Imports Microsoft.Reporting.WinForms

Public Class Reporting

   Implements IDisposable
   Public m_currentPageIndex As Integer
   Public m_streams As IList(Of Stream)

   Private Function CreateStream(ByVal name As String, ByVal fileNameExtension As String, ByVal encoding As Encoding, ByVal mimeType As String, ByVal willSeek As Boolean) As Stream
       Dim stream As Stream = New MemoryStream()
       m_streams.Add(stream)
       Return stream
   End Function

   Public Sub Export(ByVal report As LocalReport)
       Dim deviceInfo As String = _
         "<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>"
       Dim warnings() As Warning = Nothing
       m_streams = New List(Of Stream)()
       report.Render("Image", deviceInfo, AddressOf CreateStream, warnings)
       Dim stream As Stream
       For Each stream In m_streams
           stream.Position = 0
       Next
   End Sub

   Public Sub PrintPage(ByVal sender As Object, ByVal ev As PrintPageEventArgs)
       Dim pageImage As New Metafile(m_streams(m_currentPageIndex))
       ev.Graphics.DrawImage(pageImage, ev.PageBounds)
       m_currentPageIndex += 1
       ev.HasMorePages = (m_currentPageIndex < m_streams.Count)
   End Sub

   Public Sub Print()
       If m_streams Is Nothing OrElse m_streams.Count = 0 Then
           Throw New Exception("Error: no stream to print.")
       End If
       Dim printDoc As New PrintDocument()
       If Not printDoc.PrinterSettings.IsValid Then
           Throw New Exception("Error: cannot find the default printer.")
       Else
           AddHandler printDoc.PrintPage, AddressOf PrintPage
           m_currentPageIndex = 0
           printDoc.Print()
       End If
   End Sub

   Public Overloads Sub Dispose() Implements IDisposable.Dispose
       If Not (m_streams Is Nothing) Then
           Dim stream As Stream
           For Each stream In m_streams
               stream.Close()
           Next
           m_streams = Nothing
       End If
   End Sub

End Class

الكلاس لا يحتاج تعديل فهو ثابت لأي مشروع .

في كوماند الطباعة يوضع الكود التالي للطباعة المباشرة بدون عرض التقرير

كود :
    Dim myRPTForm As New ReportViewer
        Dim report As LocalReport = New LocalReport()
        Dim myPRT As New Reporting
        '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

        'تعبئة الداتا سيت بالبيانات المراد طباعتها
        Dim dp As New OleDbDataAdapter("select * from tb1", conn)
        Dim ds As New DataSet
        ds.Clear()
        dp.Fill(ds, "tb1")
        '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

        'مسار التقرير وادراج البيانات لمصدر التقرير
        report.ReportPath = "..\..\Report1.rdlc"
        report.DataSources.Add(New ReportDataSource("DataSet1", ds.Tables("tb1")))
        '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

        'امر الطباعة المباشرة بدون عرض التقرير
        myPRT.Export(report)
        myPRT.m_currentPageIndex = 0
        myPRT.Print()
وإذا ما وضحت الطريقة ارفق مثال مبسط فقط لعملية الطباعة ،، وسأقوم بعملها لك .
الرد }}}
تم الشكر بواسطة: sniperjawadino , الوادي , ابو ليلى , ibraheam


الردود في هذا الموضوع
RE: تعديل بسيط في الطباعة المباشرة فقط ReportViewer - بواسطة حريف برمجة - 15-08-16, 09:43 PM


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم