LocalReport.Render Method (String, String, CreateStreamCallback, out Warning[])

Processes the report and renders it in the specified format using a stream provided by a callback function.

Namespace: Microsoft.Reporting.WebForms
Assembly: Microsoft.ReportViewer.WebForms (in microsoft.reportviewer.webforms.dll)


Public Sub Render ( _
    format As String, _
    deviceInfo As String, _
    createStream As CreateStreamCallback, _
    <OutAttribute> ByRef warnings As Warning() _
Dim instance As LocalReport
Dim format As String
Dim deviceInfo As String
Dim createStream As CreateStreamCallback
Dim warnings As Warning()

instance.Render(format, deviceInfo, createStream, warnings)
public void Render (
    string format,
    string deviceInfo,
    CreateStreamCallback createStream,
    out Warning[] warnings
void Render (
    String^ format, 
    String^ deviceInfo, 
    CreateStreamCallback^ createStream, 
    [OutAttribute] array<Warning^>^% warnings
public void Render (
    String format, 
    String deviceInfo, 
    CreateStreamCallback createStream, 
    /** @attribute OutAttribute() */ /** @ref */ Warning[] warnings
JScript does not support passing value-type arguments by reference.


  • format
    The format in which to render the report. This argument maps to a rendering extension. Only the EXCEL format is supported in this release.
  • deviceInfo
    An XML string that contains the device-specific content that is required by the rendering extension specified in the format parameter. For more information about device information settings for specific output formats, see "Device Information Settings" in SQL Server Books Online.
  • warnings
    [out] An array of Warning objects that describes any warnings that occurred during report processing.


This method accepts a CreateStreamCallback delegate function in the createStreamCallback argument to support custom handling of secondary streams. This method is useful for printing.


The following code example shows the Render method being used with a CreateStreamCallback callback function.

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

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()
        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)
        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>" + _
        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
    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
        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)
        End If
        AddHandler printDoc.PrintPage, AddressOf PrintPage
    End Sub

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


        m_currentPageIndex = 0
    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
            m_streams = Nothing
        End If
    End Sub

    Public Shared Sub Main(args as string())
        Using demo As Demo = new Demo()
        End Using
    End Sub
End Class
using System;
using System.IO;
using System.Data;
using System.Text;
using System.Drawing.Imaging;
using System.Drawing.Printing;
using System.Collections.Generic;
using Microsoft.Reporting.WebForms;

public class Demo : IDisposable
    private int m_currentPageIndex;
    private IList<Stream> m_streams;

    private DataTable LoadSalesData()
        DataSet dataSet = new DataSet();
        return dataSet.Tables[0];

    private Stream CreateStream(string name, string fileNameExtension, 
     Encoding encoding,string mimeType, bool willSeek)
        Stream stream = new FileStream(name + "." + fileNameExtension, 
        return stream;

    private void Export(LocalReport report)
        string deviceInfo =
          "<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>" +
        Warning[] warnings;
        m_streams = new List<Stream>();
        report.Render("Image", deviceInfo, CreateStream, out warnings);

        foreach (Stream stream in m_streams)
            stream.Position = 0;

    private void PrintPage(object sender, PrintPageEventArgs ev)
        Metafile pageImage = new Metafile(m_streams[m_currentPageIndex]);
        ev.Graphics.DrawImage(pageImage, 0, 0);

        ev.HasMorePages = (m_currentPageIndex < m_streams.Count);

    private void Print()
        const string printerName = "Microsoft Office Document Image Writer";

        if (m_streams == null || m_streams.Count == 0)

        PrintDocument printDoc = new PrintDocument(); 
        printDoc.PrinterSettings.PrinterName = printerName;
        if (!printDoc.PrinterSettings.IsValid)
            string msg = String.Format("Can't find printer \"{0}\".", printerName);
        printDoc.PrintPage += new PrintPageEventHandler(PrintPage);

    private void Run()
        LocalReport report = new LocalReport();
        report.ReportPath = "Report.rdlc";
        report.DataSources.Add(new ReportDataSource("Sales", LoadSalesData()));


        m_currentPageIndex = 0;

    public void Dispose()
        if (m_streams != null)
            foreach (Stream stream in m_streams)
            m_streans = null;

    public static int Main(string[] args) 
        using (Demo demo = new Demo())
        return 0;

See Also


LocalReport Class
LocalReport Members
Microsoft.Reporting.WebForms Namespace