我的程序是B/S结构的,用的是VS2005 C#自带的水晶报表,谁知道CrystalReportViewer自带的打印按钮的事件是怎么写的吗?先谢谢了!分不够可以再加!

解决方案 »

  1.   

    this.crystalReportViewer1.PrintReport();
      

  2.   

    谢谢楼上的回答,可我是B/S程序啊,你给我的是C/S的打印函数,大家快帮帮忙啊,我被这个问题困扰得快晕了!
      

  3.   

    希望对您有用:
     水晶报表查看器CrystalReportViewer自带打印功能,调用当前系统默认打印机进行打印,但.NET里的水晶版本不支持Web打印,需要水晶报表10以上的版本才支持。另外由于其他原因,我们大多需要自己写代码进行打印,这就牵扯到如何写代码、如何设置打印参数的问题,以下是一些基本知识: 
    打印的基本代码:CrystalReport1 report = new CrystalReport1(); //Report为你自己的报表名
    PageMargins margins;
    margins = Report.PrintOptions.PageMargins;
    margins.bottomMargin = 250;
    margins.leftMargin = 350;
    margins.rightMargin = 350;
    margins.topMargin = 350;
    // Apply the page margins.
    Report.PrintOptions.ApplyPageMargins(margins);// Select the printer.
    string printerName = "\\\\局域网机器名\\打印机名(例如HP 2100)";  //本地打印机直接指定名称
    Report.PrintOptions.PrinterName = printerName;          //指定打印机名称
    Report.PrintOptions.PaperSize = PaperSize.PaperA4;   //指定纸张尺寸report.PrintToPrinter(1, true, 1, 4);下面简单就打印中的参数进行说明:PrintOptions类,提供用于设置报表打印选项的属性和方法。PrintOptions成员:
        PageContentHeight---Int32,获取页面内容的高度 
        PageContentWidth---Int32,获取页面内容的宽度 
        PageMargins---获取报表的边距 
        PageOrientation---获取或设置打印机纸张方向 
        Pagesize---获取或设置当前打印机纸张的大小 
        PrinterName---字符串,获取或设置报表所使用的打印机名称 ReportDocument.PrintToPrinter方法 
    public virtual void PrintToPrinter( int nCopies, bool collated, int startPageN, int endPageN ) 
        nCopies 指明要打印的分数 
        collated 指明是否逐份打印 
        startPageN 指明要打印的第一页 
        endPageN 指明要打印的最后一页
      

  4.   

    楼上的,谢谢你,可这不是我想要的答案,printtoprinter()只能打印到Web所在的服务器端,我是想把所有不同数据源的报表放在一起打印出来,所以我很想知道Cr10自带的那个打印按钮是怎么实现的,我想仿照那个事件写一个打印到客户端的事件。大家谁还能帮帮我啊,我真的没有办法了。
      

  5.   

    打印是方法 ReportDocument.PrintToPrinter(1, false, 0, 0)    private ReportDocument customerReport;    protected void Page_Load(object sender, EventArgs e)
        {
            customerReport = new ReportDocument();
            string reportPath = Server.MapPath("CrystalReport2.rpt");
            customerReport.Load(reportPath);        //组织数据源dataSet.....        customerReport.SetDataSource(dataSet);
            CrystalReportViewer1.ReportSource = customerReport;
            CrystalReportViewer1.PrintMode = CrystalDecisions.Web.PrintMode.ActiveX;
        }    protected void btnPrint_Click(object sender, System.EventArgs e)
        {
            // 设置打印页边距 
            PageMargins margins;
            margins = customerReport.PrintOptions.PageMargins;
            margins.bottomMargin = 250;
            margins.leftMargin = 350;
            margins.rightMargin = 350;
            margins.topMargin = 450;
            customerReport.PrintOptions.ApplyPageMargins(margins);
            CrystalReportViewer1.PrintMode = CrystalDecisions.Web.PrintMode.ActiveX;
            customerReport.PrintToPrinter(1, false, 0, 0);
        }
      

  6.   

    说下我的思路吧:
    在服务器端生成生晶报表后将它转化文件流形成一个PDF文件送到客户端,在客户端打印这个文件
    拙见,
      

  7.   

    谢谢楼上的,可是我现在又遇到问题了,我是要把多个水晶报表一起打印出来,现在倒是能输出到客户端,可是每次只能显示一个PDF文件,我怎么能把两个以上的PDF文件合并成一个呢?
      

  8.   

    不可能,你只能把多个表单合到一个pdf中去
    其实要是一次打印多个数据源,一般情况都是多个数据表。
    最好使用Excel来处理,一个sheet页一个报表。
    http://blog.csdn.net/lanwilliam/archive/2008/03/10/2163156.aspx
    可以考虑用我封的类,里面还有些别的方法。
    当然水晶报表也可以,只不过没试过。
      

  9.   

    谢谢lanwilliam ,可是如果用你说的那种Excel方法,那客户嫌麻烦,因为本身单个打印是没有任何问题的。他只想按一下按钮,就能把所有的报表一次打出来。我想如果能把所有报表都合并成一个PDF文件,生成到客户端,这样他就可以一次打印出全部报表了。可是我现在不知道怎么把多个报表合并到一个PDF文件里,请多多指点!再次感谢!