How to directly print a Report without going throu

2019-04-09 22:20发布

I wrote this code to print a Crystal report.. but I got error

'missing parameters'...

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

So help to solve this issue....how to print directly without going through Crystal Reports Viewer?

6条回答
Lonely孤独者°
2楼-- · 2019-04-09 22:42
reportname report1=new reportname(); 
report1.PrintOptions.PaperOrientation = PaperOrientation.Portrait;
report1.PrintOptions.PaperSize = PaperSize.PaperA4;
report1.PrintToPrinter(1, false, 0, 15);

use these codes with function(Parameters)

查看更多
Lonely孤独者°
3楼-- · 2019-04-09 22:46
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 method prints the specified pages of the report to the printer selected with the help of the PrintOptions.PrinterName property.
If no printer is selected, the default printer specified in the report will be used.

We are using PrintToPrinter method as :

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

where:

  • nCopies indicates the number of copies to print.
  • collated indicates whether to collate the pages.
  • startPage indicates the first page to print.
  • endPage indicates the last page to print.
查看更多
Deceive 欺骗
4楼-- · 2019-04-09 22:47
  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));

After That..

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

you should try this ... you will get definetly success...

查看更多
闹够了就滚
6楼-- · 2019-04-09 23:05

Printing directly to the printer is not going to solve your problem. The Crystal Report requires parameters to be set correctly and they're not for some reason.

查看更多
爷的心禁止访问
7楼-- · 2019-04-09 23:06

So Simple

  1. Remove thes lines:

    crystalReportViewer1.ReportSource = objRpt;
    crystalReportViewer1.Refresh();
    
  2. Add this line:

    objRpt.PrintToPrinter(1, false, 0, 0);
    
查看更多
登录 后发表回答