【问题标题】:How to directly print a Report without going through Crystal Reports Viewer如何在不通过 Crystal Reports Viewer 的情况下直接打印报表
【发布时间】:2020-02-03 02:01:45
【问题描述】:

我写了这段代码来打印一个水晶报表..但我得到了错误

'缺少参数'...

ReportDocument rdoc = new ReportDocument();
rdoc .Load (Application.StartupPath +"\\"+@"REPORTS\SalaryReport.rpt");

rdoc.SetDataSource(ds.Tables[0]);

ParameterFields pfs = new ParameterFields();

ParameterField pfv = new ParameterField();
ParameterDiscreteValue pdv1 = new ParameterDiscreteValue();
pfv.Name = "fd";
pdv1.Value = fd;
pfv.CurrentValues.Add(pdv1);
pfs.Add(pfv);

ParameterField pfv1 = new ParameterField();
ParameterDiscreteValue pdv11 = new ParameterDiscreteValue();
pfv1.Name = "td";
pdv11.Value = td;
pfv1.CurrentValues.Add(pdv11);
pfs.Add(pfv1);

ParameterField pfv2 = new ParameterField();
ParameterDiscreteValue pdv12 = new ParameterDiscreteValue();
pfv2.Name = "department";
pdv12.Value = Dept;
pfv2.CurrentValues.Add(pdv12);
pfs.Add(pfv2);
crystalReportViewer1.ParameterFieldInfo = pfs;
crystalReportViewer1.ReportSource = rdoc;

PrinterSettings getprinterName = new PrinterSettings();
rdoc.PrintOptions.PrinterName = getprinterName.PrinterName;
rdoc.PrintToPrinter(1, true, 1, 1);

所以帮助解决这个问题....如何不通过水晶报表查看器直接打印?

【问题讨论】:

    标签: c# crystal-reports


    【解决方案1】:

    这么简单

    1. 删除这些行:

      crystalReportViewer1.ReportSource = objRpt;
      crystalReportViewer1.Refresh();
      
    2. 添加这一行:

      objRpt.PrintToPrinter(1, false, 0, 0);
      

    【讨论】:

      【解决方案2】:

      【讨论】:

      • 在我的报告中不使用 ParameterFields 意味着我得到了输出,但我使用 ParameterFields 意味着我收到错误“缺少参数”,...
      【解决方案3】:

      直接打印到打印机并不能解决您的问题。 Crystal Report 需要正确设置参数,但出于某种原因,它们没有正确设置。

      【讨论】:

        【解决方案4】:
        reportname report1=new reportname(); 
        report1.PrintOptions.PaperOrientation = PaperOrientation.Portrait;
        report1.PrintOptions.PaperSize = PaperSize.PaperA4;
        report1.PrintToPrinter(1, false, 0, 15);
        

        将这些代码与函数(参数)一起使用

        【讨论】:

          【解决方案5】:
            List<BusLib.Report.ReportParameter> ParaList = new List<BusLib.Report.ReportParameter>();
                      ParaList.Add(new BusLib.Report.ReportParameter("Para1", Value1));
                      ParaList.Add(new BusLib.Report.ReportParameter("Para2", Value2));
                      ParaList.Add(new BusLib.Report.ReportParameter("Para3", Value3));
                      ParaList.Add(new BusLib.Report.ReportParameter("Para4", Value4));
          

          在那之后..

          public void SetParameters(List<BusLib.Report.ReportParameter> pParams)
              {
                  if (pParams == null) { return; }
                  try
                  {
                      foreach (BusLib.Report.ReportParameter pPara in pParams)
                      {
                          CReport.SetParameterValue(pPara.ParameterName, pPara.ParameterValue);
                      }
                  }
                  catch (Exception Ex)
                  {
                      Val.Message(Ex.Message.ToString());
                  }
              }
          

          你应该试试这个……你一定会成功的……

          【讨论】:

            【解决方案6】:
            private void PrintReport(string reportPath, string PrinterName)
            {
                CrystalDecisions.CrystalReports.Engine.ReportDocument rptDoc =
                                    new CrystalDecisions.CrystalReports.Engine.ReportDocument();
                rptDoc.Load(reportPath);
            
                CrystalDecisions.Shared.PageMargins objPageMargins;
                objPageMargins = rptDoc.PrintOptions.PageMargins;
                objPageMargins.bottomMargin = 100;
                objPageMargins.leftMargin = 100;
                objPageMargins.rightMargin = 100;
                objPageMargins.topMargin = 100;
                rptDoc.PrintOptions.ApplyPageMargins(objPageMargins);
                //rptDoc.PrintOptions.PrinterName = PrinterName;
                rptDoc.PrintToPrinter(1, false, 0, 0);
            }
            
            private void PrintToPrinter()
            {
                PrintReport(System.Windows.Forms.Application.StartupPath +"\\VCrpfrmprint.rpt","Send To OneNote 2010");
            }
            

            rptDoc.PrintToPrinter 方法将报告的指定页面打印到借助 PrintOptions.PrinterName 属性选择的打印机。
            如果没有选择打印机,将使用报告中指定的默认打印机。

            我们使用PrintToPrinter 方法作为:

            public void PrintToPrinter (int nCopies , boolean collated , int startPage , int endPage );
            

            地点:

            • nCopies 表示要打印的份数。
            • collated 表示是否整理页面。
            • startPage 表示要打印的第一页。
            • endPage 表示要打印的最后一页。

            【讨论】:

              【解决方案7】:
               private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
                      {
                          if (MessageBox.Show("Do you want to Print/View P.O? Please be patient as P.O may take few seconds to load.", "", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                          {
                              pl.POId = dataGridView1.Rows[e.RowIndex].Cells[1].Value.ToString();
                              DataTable dt = new DataTable();
                              dt = bl.PurchaseOrderPrint(pl);
                              if (dt.Rows.Count > 0)
                              {
                                  Reports.PuchaseOrder rpt = new Reports.PuchaseOrder();
                                  Print f = new Print();
                                  rpt.SetDataSource(dt);
                                  f.CRV.ReportSource = rpt;
                                  f.Show();
                              }
                          }
                          else
                          {
                              return;
                          }
                      }
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2013-03-09
                • 1970-01-01
                • 1970-01-01
                • 2011-06-09
                相关资源
                最近更新 更多