MSDN Library

CreateStreamCallback Delegate

 

Provides a stream to the ReportViewer control for rendering.

Namespace:   Microsoft.Reporting.WinForms
Assembly:  Microsoft.ReportViewer.WinForms (in Microsoft.ReportViewer.WinForms.dll)

Public Delegate Function CreateStreamCallback (
	name As String,
	extension As String,
	encoding As Encoding,
	mimeType As String,
	willSeek As Boolean
) As Stream

Parameters

name
Type: System.String

The name of the stream.

extension
Type: System.String

The file name extension to use if a file stream is being created.

encoding
Type: System.Text.Encoding

An Encoding enumerator value specifying the character encoding of the stream. This may be null if the stream does not contain characters.

mimeType
Type: System.String

A string containing the MIME type of the stream.

willSeek
Type: System.Boolean

A Boolean value indicated whether the stream needs to support seeking. If the value is false, the stream will be forward-only and will be sent to the client in chunks as it is created. If the value is true, the stream may be written in any order.

Return Value

Type: System.IO.Stream

A Stream object to which the ReportViewer control can write data.

This delegate function may be passed into the M:Microsoft.ReportingServices.LocalReport.Render(Microsoft.ReportingServices.ReportRendering.IRenderingExtension,System.String,System.String,Microsoft.ReportingServices.Interfaces.CreateAndRegisterStream,Microsoft.ReportingServices.Warning[]@) method of the P:Microsoft.ReportingServices.WinForms.ReportViewer.LocalReport object to support custom handling of secondary streams. The main body of the report is the first stream that is created.

Legacy Code Example

The following code snippet shows a CreateStreamCallback callback function being passed to the Render method in a console application.

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 Demo
    Implements IDisposable

    private m_currentPageIndex As Integer
    private m_streams As IList(Of Stream)

    Private Function LoadSalesData() As DataTable
        Dim dataSet As New DataSet()
        dataSet.ReadXml("data.xml")
        Return dataSet.Tables(0)
    End Function

    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 FileStream(name + "." +  fileNameExtension, FileMode.Create)
        m_streams.Add(stream)
        Return stream
    End Function

    Private Sub Export(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

    Private Sub PrintPage(sender As Object, 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

    Private Sub Print()
        Const printerName As String = "Microsoft Office Document Image Writer"

        If m_streams Is Nothing Or m_streams.Count = 0 Then
            Return
        End If 

        Dim printDoc As New PrintDocument()
        printDoc.PrinterSettings.PrinterName = printerName
        If Not printDoc.PrinterSettings.IsValid Then
            Dim msg As String = String.Format(_
                 "Can't find printer ""{0}"".", printerName)
            Console.WriteLine(msg)
            Return
        End If
        AddHandler printDoc.PrintPage, AddressOf PrintPage
        printDoc.Print()
    End Sub

    Private Sub Run()
        Dim report As LocalReport = new LocalReport()
        report.ReportPath = "Report.rdlc"
        report.DataSources.Add(new ReportDataSource("Sales", LoadSalesData()))

        Export(report)

        m_currentPageIndex = 0
        Print()
    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

    Public Shared Sub Main(args as string())
        Using demo As Demo = new Demo()
            demo.Run()
        End Using
    End Sub
End Class
Return to top
Show:
© 2016 Microsoft