下载了一个PrintControl.cab(vs2008用的)
然后在webconfig中设置:
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![ExpandedBlockStart.gif](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1
<
configSections
>
2 < sectionGroup name ="businessObjects" >
3 < sectionGroup name ="crystalReports" >
4 < section name ="printControl" type ="System.Configuration.NameValueSectionHandler, System, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, Custom=null" /> </ sectionGroup >
5 </ sectionGroup >
6 </ configSections >
7 < businessObjects >
8 < crystalReports >
9 < printControl >
10 < add key ="url" value ="WebProducer/PrintControl.cab" />
11 </ printControl >
12 </ crystalReports >
13 </ businessObjects >
2 < sectionGroup name ="businessObjects" >
3 < sectionGroup name ="crystalReports" >
4 < section name ="printControl" type ="System.Configuration.NameValueSectionHandler, System, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, Custom=null" /> </ sectionGroup >
5 </ sectionGroup >
6 </ configSections >
7 < businessObjects >
8 < crystalReports >
9 < printControl >
10 < add key ="url" value ="WebProducer/PrintControl.cab" />
11 </ printControl >
12 </ crystalReports >
13 </ businessObjects >
在需要打印的页面上添加以下代码:
1
<
object
id
="CrystalPrintControl"
classid
="CLSID:83A3D1E4-ADC6-434D-9B61-B8CBA6183441"
2 codebase ="PrintControl.cab" version ="10,5,1,2285" height ="0px"
3 viewastext >
4 </ object >
2 codebase ="PrintControl.cab" version ="10,5,1,2285" height ="0px"
3 viewastext >
4 </ object >
设置height="0px"主要是让 object不显示在页面上;
添加水晶报表crystalReportViewr
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![ExpandedBlockStart.gif](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1
<
CR:CrystalReportViewer
ID
="CrystalReportViewer1"
runat
="server"
AutoDataBind
="true"
2 EnableDrillDown ="false" DisplayGroupTree ="false" style ="font-size: 11px"
3 HasCrystalLogo ="False" BestFitPage ="False" HasExportButton ="False"
4 PrintMode ="ActiveX" Height ="40px" Width ="0px" />
2 EnableDrillDown ="false" DisplayGroupTree ="false" style ="font-size: 11px"
3 HasCrystalLogo ="False" BestFitPage ="False" HasExportButton ="False"
4 PrintMode ="ActiveX" Height ="40px" Width ="0px" />
将width设置为“0”让客户无法看见crystalReportViewr,但实际上crystalReportViewr还是存在于页面上的。本来想把height设置为“0px”但总提示出错,结果设置为这个数运行后同样看不到crystalReportViewr.就不理它了。
在前台页面上加上脚本调用水晶报表自带的打印按钮
1
2 < script type = " text/javascript " >
3 function printIt() {
4 document.getElementsByName( " CrystalReportViewer1$ctl02$ctl01 " ).item( 0 ).click();
5 return false ;
6 }
7 < / script>
2 < script type = " text/javascript " >
3 function printIt() {
4 document.getElementsByName( " CrystalReportViewer1$ctl02$ctl01 " ).item( 0 ).click();
5 return false ;
6 }
7 < / script>
然后添加自定义打印按钮:
<input id="bt1" type="button" οnclick="printIt();"/>
后台方面绑定水晶报表:
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![ExpandedBlockStart.gif](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
protected
void
Page_Load(object sender, EventArgs e)
{
// if (!IsPostBack)
// {
// }
// 本来是想写在IsPostBack里面的,但这样写就提示您请求的报表需要更多信息... 所以只好写在外面 ,原因是打印的时候还要重新绑定水晶报表。
BindCRV();
}
void BindCRV
{
CrystalDecisions.Web.CrystalReportSource crs = new CrystalDecisions.Web.CrystalReportSource();
PrintDocument prtdoc = new PrintDocument();
string strDefaultPrinter = prtdoc.PrinterSettings.PrinterName;
try
{
crs.ReportDocument.Load(reportpath);
crs.ReportDocument.SetDataSource(ds.Tables[ 0 ]);
crs.DataBind();
CrystalReportViewer1.ReportSource = crs;
CrystalReportViewer1.DataBind();
}
catch (Exception ex)
{
// UnCommon.ShoMessage(ex.Message, false, this);
// WSBG.UnCommon.ExecuteScript("alert('" + ex.Message + "')", this);
}
finally
{
crs.Dispose();
GC.Collect();
}
}
{
// if (!IsPostBack)
// {
// }
// 本来是想写在IsPostBack里面的,但这样写就提示您请求的报表需要更多信息... 所以只好写在外面 ,原因是打印的时候还要重新绑定水晶报表。
BindCRV();
}
void BindCRV
{
CrystalDecisions.Web.CrystalReportSource crs = new CrystalDecisions.Web.CrystalReportSource();
PrintDocument prtdoc = new PrintDocument();
string strDefaultPrinter = prtdoc.PrinterSettings.PrinterName;
try
{
crs.ReportDocument.Load(reportpath);
crs.ReportDocument.SetDataSource(ds.Tables[ 0 ]);
crs.DataBind();
CrystalReportViewer1.ReportSource = crs;
CrystalReportViewer1.DataBind();
}
catch (Exception ex)
{
// UnCommon.ShoMessage(ex.Message, false, this);
// WSBG.UnCommon.ExecuteScript("alert('" + ex.Message + "')", this);
}
finally
{
crs.Dispose();
GC.Collect();
}
}
终于大功公成,不预览直接打印