LocalReport.Render メソッド (String, String, CreateStreamCallback, Warning[])
公開日: 2016年7月
コールバック関数によって提供されたストリームを使用して、レポートを処理し、指定された形式で表示します。
名前空間: Microsoft.Reporting.WinForms
アセンブリ: Microsoft.ReportViewer.WinForms (Microsoft.ReportViewer.WinForms.dll 内)
構文
public void Render(
string format,
string deviceInfo,
CreateStreamCallback createStream,
out Warning[] warnings
)
public:
void Render(
String^ format,
String^ deviceInfo,
CreateStreamCallback^ createStream,
[OutAttribute] array<Warning^>^% warnings
)
member Render :
format:string *
deviceInfo:string *
createStream:CreateStreamCallback *
warnings:Warning[] byref -> unit
Public Sub Render (
format As String,
deviceInfo As String,
createStream As CreateStreamCallback,
<OutAttribute> ByRef warnings As Warning()
)
パラメーター
format
Type: System.Stringレポートを表示する形式。 この引数は、表示拡張機能にマップされます。 サポートされる形式には、Excel、PDF、Word、および画像があります。
使用可能なレンダリング拡張子にアクセスするには ListRenderingExtensions メソッドを使用します。
deviceInfo
Type: System.Stringformat パラメーターに指定されている表示拡張機能に必要な、デバイス固有のコンテンツを含んでいる XML 文字列。 特定の出力形式のデバイス情報設定の詳細については、SQL Server オンライン ブックの「デバイス情報設定」(fe718939-7efe-4c7f-87cb-5f5b09caeff4) を参照してください。
createStream
Type: Microsoft.Reporting.WinForms.CreateStreamCallbackレンダリング用に Stream オブジェクトを提供するために使用される CreateStreamCallback デリゲート関数。
warnings
Type: Microsoft.Reporting.WinForms.Warning[][出力] レポート処理とレンダリングの間に発生した警告を記述した Warning オブジェクトの配列。
備考
This method accepts a CreateStreamCallback delegate function in the createStreamCallback argument to support custom handling of 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.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)
Debug.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
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.WinForms;
public class Demo : IDisposable
{
private int m_currentPageIndex;
private IList<Stream> m_streams;
private DataTable LoadSalesData()
{
DataSet dataSet = new DataSet();
dataSet.ReadXml("data.xml");
return dataSet.Tables[0];
}
private Stream CreateStream(string name, string fileNameExtension,
Encoding encoding, string mimeType, bool willSeek)
{
Stream stream = new FileStream(name + "." + fileNameExtension,
FileMode.Create);
m_streams.Add(stream);
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>" +
"</DeviceInfo>";
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);
m_currentPageIndex++;
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)
return;
PrintDocument printDoc = new PrintDocument();
printDoc.PrinterSettings.PrinterName = printerName;
if (!printDoc.PrinterSettings.IsValid)
{
string msg = String.Format("Can't find printer \"{0}\".",
printerName);
Debug.WriteLine(msg);
return;
}
printDoc.PrintPage += new PrintPageEventHandler(PrintPage);
printDoc.Print();
}
private void Run()
{
LocalReport report = new LocalReport();
report.ReportPath = "Report.rdlc";
report.DataSources.Add(new ReportDataSource("Sales", LoadSalesData()));
Export(report);
m_currentPageIndex = 0;
Print();
}
public void Dispose()
{
if (m_streams != null)
{
foreach (Stream stream in m_streams)
stream.Close();
m_streans = null;
}
}
public static int Main(string[] args)
{
using (Demo demo = new Demo())
{
demo.Run();
}
return 0;
}
}
関連項目
Render オーバーロード
LocalReport クラス
Microsoft.Reporting.WinForms 名前空間
トップに戻る