Partage
  • Partager sur Facebook
  • Partager sur Twitter

Imprimer RDLC sans prévisualisation vb.net

Imprimer une rapport ReportViewer directement en vb.net

Sujet résolu
    22 février 2019 à 16:41:30

    Bonjour la communauté,

    Je tente d'envoyer directement en impression un rapport qui fonctionne très bien dans son utilisation normal.

    J'ai trouvé de la documentation ici : https://docs.microsoft.com/en-us/previous-versions/ms252091%28v%3dvs.140%29

    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

    • Partager sur Facebook
    • Partager sur Twitter
    Si vous ne réussissez pas du premier coup, appelez ça « version 1.0 ».
      27 février 2019 à 15:44:22

      Si nécessaire ça fonctionne avec le code suivant:

          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



      • Partager sur Facebook
      • Partager sur Twitter
      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.
      • Editeur
      • Markdown