5

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

'缺少参数'...

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);

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

4

7 回答 7

2

很简单

  1. 删除这些行:

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

    objRpt.PrintToPrinter(1, false, 0, 0);
    
于 2018-06-05T18:32:41.263 回答
1

请使用PrintToPrinter方法直接打印水晶报表。

http://msdn.microsoft.com/en-us/library/aa691452%28VS.71%29.aspx

http://www.nullskull.com/q/10110521/print-crystal-report-without-viewing.aspx

于 2013-06-29T06:18:53.290 回答
1

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

于 2015-08-28T18:53:03.550 回答
0
reportname report1=new reportname(); 
report1.PrintOptions.PaperOrientation = PaperOrientation.Portrait;
report1.PrintOptions.PaperSize = PaperSize.PaperA4;
report1.PrintToPrinter(1, false, 0, 15);

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

于 2013-06-29T10:16:06.453 回答
0
  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());
        }
    }

你应该试试这个......你会得到肯定的成功......

于 2016-03-19T05:23:41.473 回答
0
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表示要打印的最后一页。
于 2016-07-08T18:33:57.113 回答
0
 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;
            }
        }
于 2019-09-02T07:07:24.140 回答