Malheureusement j'ai l'erreur suivante: "Impossible de créer un lecteur de données pour le dataset 'DataSet1'."
Pourtant dans mon rapport le dataset porte exactement ce nom...
je vous met mon code ci-dessous:
Private m_currentPageIndex As Integer
Private m_streams As IList(Of Stream)
Public Sub Print()
Dim report As LocalReport = New LocalReport
report.EnableExternalImages = True
Dim bindingSource = New BindingSource()
bindingSource.DataSource = GetInvoice()
ReportViewer1.LocalReport.DataSources.Add(New ReportDataSource("DataSet1", bindingSource))
report.ReportEmbeddedResource = "ReportViewer.FactureBHR.rdlc"
Export(report)
If m_streams Is Nothing Or m_streams.Count = 0 Then
Throw New Exception("Error: no stream to print.")
End If
Dim printDoc As PrintDocument = 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
Private Sub Export(report As LocalReport)
Dim deviceInfo = "<DeviceInfo>
<OutputFormat>EMF</OutputFormat>
<PageWidth>8.26772in</PageWidth>
<PageHeight>11.41732in</PageHeight>
<MarginTop>0in</MarginTop>
<MarginLeft>0in</MarginLeft>
<MarginRight>0in</MarginRight>
<MarginBottom>0in</MarginBottom>
</DeviceInfo>"
Dim warning As Warning()
m_streams = New List(Of Stream)
report.Render("Image", deviceInfo, AddressOf CreateStream, warning)
For Each stream As Stream In m_streams
stream.Position = 0
Next
End Sub
Private Sub PrintPage(sender As Object, e As PrintPageEventArgs)
Dim pageImage As Metafile = New Metafile(m_streams(m_currentPageIndex))
Dim adjustedRect As Rectangle = New Rectangle(e.PageBounds.Left - CInt(e.PageSettings.HardMarginX), e.PageBounds.Top - CInt(e.PageSettings.HardMarginY), e.PageBounds.Width, e.PageBounds.Height)
e.Graphics.FillRectangle(Brushes.White, adjustedRect)
e.Graphics.DrawImage(pageImage, adjustedRect)
m_currentPageIndex = m_currentPageIndex + 1
e.HasMorePages = (m_currentPageIndex < m_streams.Count)
End Sub
Private Function CreateStream(name As String, fileNameExtension As String, encoding As Encoding, mimeType As String, willSeek As Boolean) As Stream
Dim stream As Stream = New MemoryStream
m_streams.Add(stream)
Return stream
End Function
sachant que get invoice me renvoi simplement une liste d'un objet facture, sinon j'ai déjà essayé de convertir ma liste d'objet en datatable sans résultat.
Auriez-vous une idée?
- Edité par mimi270188 22 février 2019 à 16:45:17
Si vous ne réussissez pas du premier coup, appelez ça « version 1.0 ».
Private warnings As Warning()
Private streamids As String()
Private mimeType As String
Private encoding As String
Private filenameExtension As String
Private m_currentPageIndex As Integer
Private m_streams As IList(Of Stream)
Private Sub Print()
Dim report As LocalReport = New LocalReport
report.EnableExternalImages = True
report.ReportEmbeddedResource = "ReportViewer.FactureBHR.rdlc"
report.DataSources.Add(New ReportDataSource("DataSet1", GetInvoice()))
Export(report)
ExecutePrint()
End Sub
Private Sub Export(report As LocalReport)
Dim deviceInfo = "<DeviceInfo>
<OutputFormat>EMF</OutputFormat>
<PageWidth>8.26772in</PageWidth>
<PageHeight>11.41732in</PageHeight>
<MarginTop>0in</MarginTop>
<MarginLeft>0in</MarginLeft>
<MarginRight>0in</MarginRight>
<MarginBottom>0in</MarginBottom>
</DeviceInfo>"
Dim warning As Warning()
m_streams = New List(Of Stream)
report.Render("Image", deviceInfo, AddressOf CreateStream, warning)
For Each stream As Stream In m_streams
stream.Position = 0
Next
End Sub
Private Sub ExecutePrint()
If m_streams Is Nothing Or m_streams.Count = 0 Then
Throw New Exception("Error: no stream to print.")
End If
Dim printDoc As PrintDocument = 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
Si vous ne réussissez pas du premier coup, appelez ça « version 1.0 ».
Imprimer RDLC sans prévisualisation vb.net
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.