<%@ Page Language="C#" AutoEventWireup="true" CodeFile="材料入库单打印.aspx.cs" Inherits="仓库_材料入库单打印" MasterPageFile="~/MasterPage2.master" Title="材料入库单打印" %>
<%@ Register assembly="Microsoft.ReportViewer.WebForms, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" namespace="Microsoft.Reporting.WebForms" tagprefix="rsweb" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
<div>
<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True"
DataSourceID="SqlDataSource1" DataTextField="单号" DataValueField="单号"
onselectedindexchanged="DropDownList1_SelectedIndexChanged">
</asp:DropDownList>
<asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="打印" />
<asp:Label ID="Label1" runat="server" ForeColor="#CC3300" Text="已打印0次,这是第1次打印!"></asp:Label>
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:testConnectionString %>"
SelectCommand="SELECT DISTINCT [单号] FROM [来料检验通知单] ORDER BY [单号] DESC"></asp:SqlDataSource>
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<rsweb:ReportViewer ID="ReportViewer1" runat="server" Font-Names="Verdana"
Font-Size="8pt" Height="619px" InteractiveDeviceInfos="(集合)"
WaitMessageFont-Names="Verdana" WaitMessageFont-Size="14pt" Width="982px"
ShowPrintButton="False">
<LocalReport ReportPath="仓库\Report2.rdlc">
<DataSources>
<rsweb:ReportDataSource DataSourceId="SqlDataSource2" Name="DataSet1" />
</DataSources>
</LocalReport>
</rsweb:ReportViewer>
<asp:SqlDataSource ID="SqlDataSource2" runat="server"
ConnectionString="<%$ ConnectionStrings:testConnectionString %>"
SelectCommand="SELECT * FROM [来料检验通知单]"></asp:SqlDataSource>
</div>
</asp:Content>
protected void Button1_Click(object sender, EventArgs e)
{
SqlConnection sqlcon = new SqlConnection();
sqlcon.ConnectionString = ConfigurationManager.ConnectionStrings["testConnectionString"].ConnectionString;
sqlcon.Open();
string sql10 = string.Format("select * from 来料检验通知单 where 单号='" + DropDownList1.SelectedValue + "'");
SqlDataAdapter myda = new SqlDataAdapter(sql10, sqlcon);
System.Data.DataTable ds = new System.Data.DataTable();
myda.Fill(ds);
LocalReport report = ReportViewer1.LocalReport;
report.DataSources.Clear();
report.ReportPath = "仓库\\Report2.rdlc";
report.DataSources.Add(new ReportDataSource("DataSet1", ds));
//Step 2: 将报表的内容输出为指定格式的数据流。
string deviceInfo =
"" +
" EMF" +
" 14.732cm" +
" 24.13cm" +
" 0.25cm" +
" 0cm" +
" 0cm" +
" 0cm" +
"";
Warning[] warnings;
//将报表的内容按照deviceInfo指定的格式输出到CreateStream函数提供的Stream中。
report.Render("Image", deviceInfo, CreateStream, out warnings);
sqlcon.Close();
}
/*
这里使用LocalReport对象的Render方法,将报表的内容输出到指定的数据流(Stream)中
。Render方法的第一个参数指定输出的流的格式
,这里指定为Image格式(图形格式)
;第二个参数为一个XML格式的字符串
,用来描述输出格式的详细信息
;第三个参数是一个回调函数(CreateStreamCallback委托类型)
,你需要为这个参数声明一个函数
,Render方法会将报表的内容输出到这个函数返回的Stream对象的实例中
,这个函数看上去类似下面的声明
*/
//声明一个Stream对象的列表用来保存报表的输出数据
//LocalReport对象的Render方法会将报表按页输出为多个Stream对象。
private List<Stream> m_streams;
//用来提供Stream对象的函数,用于LocalReport对象的Render方法的第三个参数。
private Stream CreateStream(string name, string fileNameExtension,
Encoding encoding, string mimeType, bool willSeek)
{
//如果需要将报表输出的数据保存为文件,请使用FileStream对象。
Stream stream = new MemoryStream();
m_streams.Add(stream);
return stream;
}
//你可以使用这个函数的参数执行更多的操作,具体内容请参考CreateStreamCallback委托。
//第四个参数用来输出报表处理过程中产生的警告信息。
//Step 3: 使用PrintDocument对象执行打印操作。
//用来记录当前打印到第几页了
private int m_currentPageIndex;
private void Print()
{
m_currentPageIndex = 0;
if (m_streams == null ||m_streams.Count == 0)
return;
//声明PrintDocument对象用于数据的打印
PrintDocument printDoc = new PrintDocument();
//指定需要使用的打印机的名称,使用空字符串”“来指定默认打印机
printDoc.PrinterSettings.PrinterName= "";
//判断指定的打印机是否可用
if(!printDoc.PrinterSettings.IsValid)
{
MessageBox.Show("Can't find printer");
return;
}
//声明PrintDocument对象的PrintPage事件,具体的打印操作需要在这个事件中处理。
printDoc.PrintPage += new PrintPageEventHandler(PrintPage);
//执行打印操作,Print方法将触发PrintPage事件。
printDoc.Print();
}
//具体的PrintPage事件处理程序如下:
private void PrintPage(object sender, PrintPageEventArgs ev)
{
//Metafile对象用来保存EMF或WMF格式的图形,
//我们在前面将报表的内容输出为EMF图形格式的数据流。
m_streams[m_currentPageIndex].Position = 0;
Metafile pageImage = new Metafile(m_streams[m_currentPageIndex]);
//指定是否横向打印
ev.PageSettings.Landscape = false;
//这里的Graphics对象实际指向了打印机
ev.Graphics.DrawImage(pageImage, 0,0);
m_streams[m_currentPageIndex].Close();
m_currentPageIndex++;
//设置是否需要继续打印
ev.HasMorePages = (m_currentPageIndex< m_streams.Count);
}
//到此,我们的报表数据就已经打印出来了,在这个过程中,你可以根据需要添加自己的打印逻辑。
}
