Microsoft RDLCレポートの直接印刷をプレビューしない
私が使います.Netはプログラムを书いて、レポートを作る时ずっと水晶のレポートでして、最近MicrosoftのRDLCでレポートをするのも悪くないことを発见して、その上便利で、最も主要な布署(WEB)の时修理は水晶のレポートほど面倒ではありません.しかし、唯一の欠点は勉強資料が少なすぎて、自分ででたらめをしなければならないことです.唯一の良い資源は蝋人形張同志の「RDLC報告書」シリーズだけで、もちろんMSDNもあります.以下はプレビューなしで直接印刷する実装であり,主なコードはMSDNから来ている.
LocalReport.Renderメソッドの最初のパラメータ
format
レポートのフォーマットを表示します.このパラメータは、レンダリング拡張プラグインにマッピングされます.サポートされるフォーマットには、Microsoft Office Excel、PDF、Imageが含まれます.詳細はMSDNを参照
例コード:ダウンロード
private void btnPrint_Click(object sender, EventArgs e)
{
Run();
}
private int m_currentPageIndex;
private IList<Stream> m_streams;
private DataTable LoadSalesData()
{
SqlConnection con = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["testrdlc.Properties.Settings.NorthwindConnectionString"].ConnectionString);
SqlCommand cmd = new SqlCommand("SELECT * FROM Employees", con);
SqlDataAdapter adp = new SqlDataAdapter();
adp.SelectCommand = cmd;
con.Open();
DataTable dt = new DataTable();
adp.Fill(dt);
con.Close();
return dt;
}
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>();
try
{
report.Render("Image", deviceInfo, CreateStream, out warnings);
}
catch (Exception ex)
{
Exception innerEx = ex.InnerException;// 。 , 。
while (innerEx != null)
{
MessageBox.Show(innerEx.Message);
innerEx = innerEx.InnerException;
}
}
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 = Application.StartupPath +"//Report1.rdlc";//
report.DataSources.Add(new ReportDataSource("NorthwindDataSet_Employees", LoadSalesData()));
Export(report);
m_currentPageIndex = 0;
Print();
}
:
、report.ReportPath 。
、 report.Render , , , 。
、
LocalReport.Renderメソッドの最初のパラメータ
format
レポートのフォーマットを表示します.このパラメータは、レンダリング拡張プラグインにマッピングされます.サポートされるフォーマットには、Microsoft Office Excel、PDF、Imageが含まれます.詳細はMSDNを参照
例コード:ダウンロード