15-08-16, 09:43 PM
(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()
